LCOV - code coverage report
Current view: top level - coupling/sendrecv - DataExchange.h (source / functions) Hit Total Coverage
Test: coverage.info Lines: 1 3 33.3 %
Date: 2025-06-25 11:26:37 Functions: 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_SENDRECV_DATAEXCHANGE_H_
       6             : #define _MOLECULARDYNAMICS_COUPLING_SENDRECV_DATAEXCHANGE_H_
       7             : 
       8             : #include "coupling/datastructures/CouplingCell.h"
       9             : #include "tarch/la/Vector.h"
      10             : 
      11             : namespace coupling {
      12             : namespace sendrecv {
      13             : template <class Cell_T, unsigned int dim> class DataExchange;
      14             : }
      15             : } // namespace coupling
      16             : 
      17             : /** This class holds information on the data exchange between processes. In
      18             :  *contrast to the SendReceiveBuffer which solely handles the technical part of
      19             :  *sending and receiving, this class needs to guarantee the validity in
      20             :  *communication, e.g. make sure that each source rank matches to a target rank
      21             :  *etc.
      22             :  *      @brief generic class for the the data exchange purposes.
      23             :  *      @tparam CouplingCell cell type
      24             :  *      @tparam dim Number of dimensions; it can be 1, 2 or 3
      25             :  *  @author Philipp Neumann
      26             :  */
      27             : template <class Cell_T, unsigned int dim> class coupling::sendrecv::DataExchange {
      28             : public:
      29             :   /** Constructor: assign an tag (_tag) to the DataExchange.
      30             :    * @param tag
      31             :    */
      32           4 :   DataExchange(unsigned int tag) : _tag(tag) {}
      33             :   /** Destructor */
      34           0 :   virtual ~DataExchange() {}
      35             : 
      36             :   /** returns the tag associated to messages for this DataExchange. @return
      37             :    * _tag*/
      38           0 :   unsigned int getTag() const { return _tag; }
      39             : 
      40             :   /** returns the ranks to which a particular cell (at index idx)
      41             :    * should be sent. This method should globally define the target ranks for
      42             :    * each global cell index of a coupling cell.
      43             :    *    @param idx unique global cell index
      44             :    */
      45             :   virtual std::vector<unsigned int> getTargetRanks(I01 idx) = 0;
      46             : 
      47             :   /** returns all ranks from which a particular cell (at index idx)
      48             :    * is sent. This method should globally define the source ranks for each
      49             :    * global cell index of a coupling cell.
      50             :    * @param idx unique global cell index
      51             :    */
      52             :   virtual std::vector<unsigned int> getSourceRanks(I01 idx) = 0;
      53             : 
      54             :   /** local rule to read from a coupling cell and write data to (e.g. send)
      55             :    * buffer
      56             :    *    @param buffer
      57             :    *    @param cell
      58             :    */
      59             :   virtual void readFromCell(double* const buffer, const Cell_T& cell) = 0;
      60             : 
      61             :   /** local rule to read from receive buffer and write data to coupling cell
      62             :    *    @param buffer
      63             :    *    @param cell
      64             :    */
      65             :   virtual void writeToCell(const double* const buffer, Cell_T& cell) = 0;
      66             : 
      67             :   /** returns the number of doubles that are sent per coupling cell. */
      68             :   virtual unsigned int getDoublesPerCell() const = 0;
      69             : 
      70             : private:
      71             :   /** tag to uniquely determine these kinds of messages that are sent between
      72             :    * processes. */
      73             :   const unsigned int _tag;
      74             : };
      75             : 
      76             : #endif // _MOLECULARDYNAMICS_COUPLING_SENDRECV_DATAEXCHANGE_H_

Generated by: LCOV version 1.14