LCOV - code coverage report
Current view: top level - coupling/transferstrategies - DirectTransferStrategy.h (source / functions) Hit Total Coverage
Test: coverage.info Lines: 3 20 15.0 %
Date: 2025-06-25 11:26:37 Functions: 0 5 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_TRANSFERSTRATEGIES_DIRECTTRANSFERSTRATEGY_H_
       6             : #define _MOLECULARDYNAMICS_COUPLING_TRANSFERSTRATEGIES_DIRECTTRANSFERSTRATEGY_H_
       7             : 
       8             : #include "coupling/cell-mappings/ComputeMassMapping.h"
       9             : #include "coupling/cell-mappings/ComputeMomentumMapping.h"
      10             : #include "coupling/transferstrategies/TransferStrategy.h"
      11             : #include "tarch/la/Vector.h"
      12             : 
      13             : namespace coupling {
      14             : namespace transferstrategies {
      15             : template <class LinkedCell, unsigned int dim> class DirectTransferStrategy;
      16             : }
      17             : } // namespace coupling
      18             : 
      19             : /** transfers and introduces mass and momentum directly into MD and to
      20             :  * macroscopic solver. So, for example, if mass M is coming from the macroscopic
      21             :  * solver, M is to be inserted into MD.
      22             :  *  @author Philipp Neumann
      23             :  *  @tparam LinkedCell the LinkedCell class is given by the implementation of
      24             :  * linked cells in the molecular dynamics simulation
      25             :  *  @tparam dim  refers to the spacial dimension of the simulation, can be 1, 2,
      26             :  * or 3 */
      27             : template <class LinkedCell, unsigned int dim>
      28             : class coupling::transferstrategies::DirectTransferStrategy : public coupling::transferstrategies::TransferStrategy<LinkedCell, dim> {
      29             : public:
      30             :   /** @brief a simple constructor
      31             :    *  @param mdSolverInterface interface for the md solver*/
      32           4 :   DirectTransferStrategy(coupling::interface::MDSolverInterface<LinkedCell, dim>* const mdSolverInterface)
      33           4 :       : coupling::transferstrategies::TransferStrategy<LinkedCell, dim>(mdSolverInterface), _massMapping(mdSolverInterface),
      34           4 :         _momentumMapping(mdSolverInterface) {}
      35             : 
      36             :   /** @brief a dummy destructor*/
      37           0 :   virtual ~DirectTransferStrategy() {}
      38             : 
      39             :   /** @brief the microscopicMass and -Momentum are set to 0
      40             :    *  @param cell coupling cell to process
      41             :    *  @param index index of the coupling cell */
      42           0 :   void processInnerCouplingCellBeforeReceivingMacroscopicSolverData(coupling::datastructures::CouplingCellWithLinkedCells<LinkedCell, dim>& cell,
      43             :                                                                     I02 index) override {
      44             :     // reset quantities
      45           0 :     const tarch::la::Vector<dim, double> zero(0.0);
      46           0 :     cell.setMicroscopicMass(0.0);
      47           0 :     cell.setMicroscopicMomentum(zero);
      48           0 :   }
      49             : 
      50             :   /** @brief the microscopicMass and -Momentum are set to 0
      51             :    *  @param cell coupling cell to process
      52             :    *  @param index index of the coupling cell */
      53           0 :   void processOuterCouplingCellBeforeReceivingMacroscopicSolverData(coupling::datastructures::CouplingCellWithLinkedCells<LinkedCell, dim>& cell,
      54             :                                                                     I02 index) override {
      55             :     // reset quantities
      56           0 :     const tarch::la::Vector<dim, double> zero(0.0);
      57           0 :     cell.setMicroscopicMass(0.0);
      58           0 :     cell.setMicroscopicMomentum(zero);
      59           0 :   }
      60             : 
      61             :   /** @brief the mass and momentum is evaluated for the cell and written to the
      62             :    * macroscopic quantities
      63             :    *  @param cell coupling cell to process
      64             :    *  @param index index of the coupling cell */
      65           0 :   void processInnerCouplingCellBeforeSendingMDSolverData(coupling::datastructures::CouplingCellWithLinkedCells<LinkedCell, dim>& cell, I02 index) override {
      66           0 :     cell.iterateConstCells(_massMapping);
      67           0 :     cell.iterateConstCells(_momentumMapping);
      68           0 :     cell.setMacroscopicMass(_massMapping.getMass());
      69           0 :     cell.setMacroscopicMomentum(_momentumMapping.getMomentum());
      70           0 :   }
      71             : 
      72             : private:
      73             :   /** necessary to compute the mass in every single cell */
      74             :   coupling::cellmappings::ComputeMassMapping<LinkedCell, dim> _massMapping;
      75             :   /** necessary to compute the momentum in every single cell  */
      76             :   coupling::cellmappings::ComputeMomentumMapping<LinkedCell, dim> _momentumMapping;
      77             : };
      78             : #endif // _MOLECULARDYNAMICS_COUPLING_TRANSFERSTRATEGIES_DIRECTTRANSFERSTRATEGY_H_

Generated by: LCOV version 1.14