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_INTERFACE_MACROSCOPICSOLVERINTERFACE_H_
6 : #define _MOLECULARDYNAMICS_COUPLING_INTERFACE_MACROSCOPICSOLVERINTERFACE_H_
7 :
8 : #include "coupling/CouplingMDDefinitions.h"
9 : #include "tarch/la/Vector.h"
10 : #include <vector>
11 :
12 : namespace coupling {
13 : namespace interface {
14 : template <unsigned int dim> class MacroscopicSolverInterface;
15 : }
16 : } // namespace coupling
17 :
18 : /** This class provides
19 : * @brief interface for the macroscopic, i.e. continuum solver
20 : * @tparam dim Number of dimensions; it can be 1, 2 or 3
21 : * @author Philipp Neumann
22 : */
23 : template <unsigned int dim> class coupling::interface::MacroscopicSolverInterface {
24 :
25 : public:
26 : /** Costructor */
27 4 : MacroscopicSolverInterface() {}
28 : /** Destructor */
29 0 : virtual ~MacroscopicSolverInterface() {}
30 :
31 : /* This function defines an offset of cells which is considered to be the outer region.
32 : * It replaces the legacy functions 'receiveMacroscopicQuantityFromMDSolver' and 'sendMacroscopicQuantityToMDSolver'
33 : * from older versions of MaMiCo. Data are sent to MD solver for cells that are not in the ghost layer
34 : * and not part of the inner region. Data needs so be send from micro to macro solver for all inner cells.
35 : * @return number of cells in outer region per direction at each boundary, e.g. 3
36 : */
37 : virtual unsigned int getOuterRegion() = 0;
38 :
39 : /** This function determines all the ranks on which the macroscopic solver
40 : *holds data of the coupling cell at index idx. By default,
41 : *this method is used for send/recv operations. However, there are situations
42 : *where the target and source rank definitions (target rank=rank of
43 : *macroscopic solver that shall receive data from MD; source rank=rank of
44 : *macroscopic solver that shall send data to MD) may differ. For example,
45 : *assume a domain decomposition using ghost layers. You may want to send data
46 : *from cells inside a process-local domain and want to receive data in all
47 : *copies of a given coupling cell (incl. ghost cells), but you may not be
48 : *able to provide valid data on every process for each cell instance (e.g., if
49 : *this cell is part of a ghost layer). For this case, the method
50 : *getSourceRanks() and getTargetRanks() can be implemented accordingly.
51 : * @param idx
52 : * @return all the ranks on which the macroscopic solver holds data of the
53 : *coupling cell at index idx.
54 : */
55 : virtual std::vector<unsigned int> getRanks(I01 idx) = 0;
56 :
57 : /** This function determines the source ranks for the global coupling cell
58 : *at index idx. A "source rank" is defined as a rank of the
59 : *macroscopic solver that provides a valid copy of the cell at idx
60 : *to the coupling tool. You may have multiple source ranks; however, each
61 : *source rank should hold a valid copy. Default: return all ranks that the
62 : *cell at idx is associated to.
63 : * @param idx
64 : * @return the source ranks for the global coupling cell at index
65 : *idx.
66 : */
67 0 : virtual std::vector<unsigned int> getSourceRanks(I01 idx) { return getRanks(idx); }
68 :
69 : /** This function determines the target ranks for the global coupling cell
70 : *at index idx. A "target rank" is defined as a rank of the
71 : *macroscopic solver that obtains a valid copy of the cell at idx
72 : *from the coupling tool. You may have multiple target ranks. Default: return
73 : *all ranks that the cell at idx is associated to.
74 : * @param idx
75 : * @return the target ranks for the global coupling cell at index
76 : *idx
77 : */
78 0 : virtual std::vector<unsigned int> getTargetRanks(I01 idx) { return getRanks(idx); }
79 : };
80 : #endif // _MOLECULARDYNAMICS_COUPLING_INTERFACE_MACROSCOPICSOLVERINTERFACE_H_
|