LCOV - code coverage report
Current view: top level - coupling/datastructures - CouplingCell.h (source / functions) Hit Total Coverage
Test: coverage.info Lines: 5 21 23.8 %
Date: 2025-06-25 11:26:37 Functions: 2 17 11.8 %

          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_DATA_STRUCTURES_COUPLINGCELL_H_
       6             : #define _MOLECULARDYNAMICS_COUPLING_DATA_STRUCTURES_COUPLINGCELL_H_
       7             : 
       8             : #include "tarch/la/Vector.h"
       9             : #include <cstdlib>
      10             : #include <fstream>
      11             : #include <iostream>
      12             : #include <string>
      13             : 
      14             : namespace coupling {
      15             : namespace datastructures {
      16             : 
      17             : template <unsigned int dim> class CouplingCell;
      18             : } // namespace datastructures
      19             : } // namespace coupling
      20             : 
      21             : /** describes a quadratic/ cubic coupling cell filled with fluid (no linked
      22             :  *cells). Base class for the class
      23             :  *coupling::datastructures::CouplingCellWithLinkedCells
      24             :  *      @brief defines the cell type with cell-averaged quantities only (no
      25             :  *linked cells).
      26             :  *      @tparam dim Number of dimensions; it can be 1, 2 or 3
      27             :  *  @author Philipp Neumann
      28             :  */
      29             : template <unsigned int dim> class coupling::datastructures::CouplingCell {
      30             : public:
      31             :   /** Constructor: initialises the coupling cell with zero values.
      32             :    */
      33       56072 :   CouplingCell()
      34       56072 :       : _microscopicMass(0.0), _microscopicMomentum(0.0), _macroscopicMass(0.0), _macroscopicMomentum(0.0), _potentialEnergy(0.0), _temperature(0.0),
      35      112144 :         _currentVelocity(0.0) {}
      36             : 
      37             :   /** Destructor */
      38       55960 :   virtual ~CouplingCell() {}
      39             : 
      40             :   /** sets the microscopic mass
      41             :    * @param mass Mass*/
      42           0 :   void setMicroscopicMass(const double& mass) { _microscopicMass = mass; }
      43             :   /** returns the microscopic mass
      44             :    * @returns _microscopicMass Mass*/
      45           0 :   const double& getMicroscopicMass() const { return _microscopicMass; }
      46             :   /** sets the microscopic moments
      47             :    * @param momentum Momentum*/
      48           0 :   void setMicroscopicMomentum(const tarch::la::Vector<dim, double>& momentum) { _microscopicMomentum = momentum; }
      49             :   /** returns the microscopic moments
      50             :    * @returns _microscopicMomentum Momentum*/
      51           0 :   const tarch::la::Vector<dim, double>& getMicroscopicMomentum() const { return _microscopicMomentum; }
      52             : 
      53             :   /** sets the microscopic mass
      54             :    * @param mass Mass*/
      55       36364 :   void setMacroscopicMass(const double& mass) { _macroscopicMass = mass; }
      56             :   /** returns the microscopic mass
      57             :    * @returns _microscopicMass Mass*/
      58           0 :   const double& getMacroscopicMass() const { return _macroscopicMass; }
      59             :   /** sets the microscopic moments
      60             :    * @param momentum Momentum*/
      61           0 :   void setMacroscopicMomentum(const tarch::la::Vector<dim, double>& momentum) { _macroscopicMomentum = momentum; }
      62             :   /** returns the microscopic moments
      63             :    * @returns _microscopicMomentum Momentum*/
      64           0 :   const tarch::la::Vector<dim, double>& getMacroscopicMomentum() const { return _macroscopicMomentum; }
      65             : 
      66             :   /** returns the mean potential energy over the coupling cell
      67             :    * @returns _potentialEnergy potential energy*/
      68           0 :   const double& getPotentialEnergy() const { return _potentialEnergy; }
      69             :   /** sets the mean potential energy over the coupling cell
      70             :    * @param potentialEnergy potential energy*/
      71           0 :   void setPotentialEnergy(const double& potentialEnergy) { _potentialEnergy = potentialEnergy; }
      72             : 
      73             :   /** adds a certain amount to the microscopic mass
      74             :    * @param mass Mass to be added to the microscopic mass*/
      75           0 :   void addMicroscopicMass(const double& mass) { _microscopicMass += mass; }
      76             :   /** adds a certain amount to the microscopic moments
      77             :    * @param momentum Momentum to be added to the microscopic moments*/
      78             :   void addMicroscopicMomentum(const tarch::la::Vector<dim, double>& momentum) { _microscopicMomentum += momentum; }
      79             : 
      80             :   /** adds a certain amount to the macroscopic mass
      81             :    * @param mass Mass to be added to the macroscopic mass*/
      82           0 :   void addMacroscopicMass(const double& mass) { _macroscopicMass += mass; }
      83             :   /** adds a certain amount to the macroscopic moments
      84             :    * @param momentum Momentum to be added to the macroscopic moments*/
      85           0 :   void addMacroscopicMomentum(const tarch::la::Vector<dim, double>& momentum) { _macroscopicMomentum += momentum; }
      86             : 
      87             :   /** sets current velocity (sampled right before any distributeX(...) call)
      88             :    * @param velocity velocity*/
      89           0 :   void setCurrentVelocity(const tarch::la::Vector<dim, double>& velocity) { _currentVelocity = velocity; }
      90             :   /** returns current velocity (sampled right before any distributeX(...) call)
      91             :    * @return _currentVelocity velocity*/
      92           0 :   const tarch::la::Vector<dim, double>& getCurrentVelocity() const { return _currentVelocity; }
      93             : 
      94             :   /** sets the temperature
      95             :    * @param temperature temperature*/
      96           0 :   void setTemperature(const double& temperature) { _temperature = temperature; }
      97             :   /** returns the temperature
      98             :    * @return _temperature temperature*/
      99           0 :   const double& getTemperature() const { return _temperature; }
     100             : 
     101             :   /** buffers for macroscopic mass that need to be transferred
     102             :    *  from the macroscopic to the microscopic simulation */
     103             :   double _microscopicMass;
     104             :   /** buffers for macroscopic quantities of momentum that need to be transferred
     105             :    *  from the macroscopic to the microscopic simulation */
     106             :   tarch::la::Vector<dim, double> _microscopicMomentum;
     107             : 
     108             :   /** buffers for macroscopic mass that need to be returned
     109             :    *  from the microscopic to the macroscopic simulation */
     110             :   double _macroscopicMass;
     111             :   /** buffers for macroscopic quantities of momentum that need to be returned
     112             :    *  from the microscopic to the macroscopic simulation */
     113             :   tarch::la::Vector<dim, double> _macroscopicMomentum;
     114             : 
     115             :   /** holds the mean potential energy within the coupling cell. This value is
     116             :    * needed as a reference potential energy value for the USHER scheme.
     117             :    */
     118             :   double _potentialEnergy;
     119             : 
     120             :   /** temperature within this cell. Needed for the thermostat. */
     121             :   double _temperature;
     122             : 
     123             :   /** buffer for current mean velocity in the cell. */
     124             :   tarch::la::Vector<dim, double> _currentVelocity;
     125             : };
     126             : 
     127             : #endif // _MOLECULARDYNAMICS_COUPLING_DATA_STRUCTURES_COUPLINGCELL_H_

Generated by: LCOV version 1.14