Branch data Line data Source code
1 : : // *****************************************************************************
2 : : /*!
3 : : \file src/Inciter/Transfer.hpp
4 : : \copyright 2012-2015 J. Bakosi,
5 : : 2016-2018 Los Alamos National Security, LLC.,
6 : : 2019-2021 Triad National Security, LLC.
7 : : All rights reserved. See the LICENSE file for details.
8 : : \brief Types for solution transfer between solvers holding different
9 : : meshes
10 : : \details Types for solution transfer between solvers holding different
11 : : meshes.
12 : : */
13 : : // *****************************************************************************
14 : : #ifndef Transfer_h
15 : : #define Transfer_h
16 : :
17 : : #include "NoWarning/charm++.hpp"
18 : :
19 : : namespace inciter {
20 : :
21 : : //! \brief Description of solution transfer between two solvers holding
22 : : //! different meshes
23 [ - - ][ - - ]: 0 : struct Transfer {
24 : : std::size_t src; //!< Source mesh id
25 : : std::size_t dst; //!< Destination mesh id
26 : : std::vector< CkCallback > cb; //!< List of callbacks to continue with
27 : : //std::vector< std::size_t > cbs; // only for debugging
28 : :
29 : : //! Constructor: empty for Charm++
30 : : explicit Transfer() = default;
31 : :
32 : : //! Constructor: initialize src and dest mesh ids
33 : 0 : explicit Transfer( std::size_t s, std::size_t d ) : src(s), dst(d) {}
34 : :
35 : : /** @name Pack/Unpack: Serialize Transfer object for Charm++ */
36 : : ///@{
37 : : //! Pack/Unpack serialize member function
38 : : //! \param[in,out] p Charm++'s PUP::er serializer object reference
39 : 0 : void pup( PUP::er& p ) {
40 : 0 : p | src;
41 : 0 : p | dst;
42 : 0 : p | cb;
43 : 0 : }
44 : : //! Pack/Unpack serialize operator|
45 : : //! \param[in,out] p Charm++'s PUP::er serializer object reference
46 : : //! \param[in,out] t Transfer object reference
47 [ - - ]: 0 : friend void operator|( PUP::er& p, Transfer& t ) { t.pup(p); }
48 : : ///@}
49 : :
50 : : //! \brief Operator << for writing a Transfer object to output streams
51 : : //! \param[in,out] os Output stream to write to
52 : : //! \param[in] t Transfer object to write
53 : : //! \return Updated output stream
54 : : friend std::ostream& operator<<( std::ostream& os, const Transfer& t ) {
55 : : os << t.src << '>' << t.dst;
56 : : return os;
57 : : }
58 : :
59 : : //! \brief Equal operator for, e.g., finding unique elements, used by, e.g.,
60 : : //! std::unique().
61 : : //! \details Test on src and dst only.
62 : : //! \param[in] transfer Transfer object to compare
63 : : //! \return Boolean indicating if term equals 'this'
64 : : bool operator== ( const Transfer& transfer) const {
65 [ - - ][ - - ]: 0 : if (src == transfer.src && dst == transfer.dst)
[ - - ][ - - ]
66 : : return true;
67 : : else
68 : : return false;
69 : : }
70 : :
71 : : //! Less-than operator for ordering, used by, e.g., std::sort().
72 : : //! \details Test on src and dst only.
73 : : //! \param[in] transfer Transfer object to compare
74 : : //! \return Boolean indicating if term is less than 'this'
75 : : bool operator< ( const Transfer& transfer ) const {
76 [ - - ][ - - ]: 0 : if (src < transfer.src)
[ - - ][ - - ]
[ - - ][ - - ]
[ - - ][ - - ]
[ - - ][ - - ]
[ - - ][ - - ]
77 : : return true;
78 [ - - ][ - - ]: 0 : else if (src == transfer.src && dst < transfer.dst)
[ - - ][ - - ]
[ - - ][ - - ]
[ - - ][ - - ]
[ - - ][ - - ]
[ - - ][ - - ]
[ - - ][ - - ]
[ - - ][ - - ]
[ - - ][ - - ]
[ - - ][ - - ]
[ - - ][ - - ]
[ - - ][ - - ]
79 : : return true;
80 : : else
81 : : return false;
82 : : }
83 : : };
84 : :
85 : : } // inciter::
86 : :
87 : : #endif // Transfer_h
|