preCICE v3.2.0
Loading...
Searching...
No Matches
MultiCouplingScheme.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <map>
4#include <string>
5#include <vector>
8#include "logging/Logger.hpp"
11#include "utils/Helpers.hpp"
12
13namespace precice::cplscheme {
14class CouplingData;
15struct ExchangeData;
16
26public:
38 double maxTime,
39 int maxTimeWindows,
40 double timeWindowSize,
43 const std::string &controller,
44 int minIterations,
45 int maxIterations);
46
48 void addDataToSend(
49 const mesh::PtrData &data,
51 bool requiresInitialization,
52 bool exchangeSubsteps,
53 const std::string &to);
54
57 const mesh::PtrData &data,
59 bool requiresInitialization,
60 bool exchangeSubsteps,
61 const std::string &from);
62
63 void determineInitialDataExchange() override;
64
65 std::vector<std::string> getCouplingPartners() const final override;
66
67 bool hasAnySendData() final override;
68
69private:
74
79
84
87
90
91 logging::Logger _log{"cplscheme::MultiCouplingScheme"};
92
93 void exchangeFirstData() final override;
94
95 void exchangeSecondData() final override;
96
97 bool sendsInitializedDataTo(const std::string &to) const;
98
99 bool receivesInitializedDataFrom(const std::string &from) const;
100
101 DataMap &getAccelerationData() final override;
102
104 void initializeReceiveDataStorage() final override;
105
107 void exchangeInitialData() final override;
108
111
114};
115
116} // namespace precice::cplscheme
std::string localParticipant() const final override
Returns the name of the local participant.
BaseCouplingScheme(double maxTime, int maxTimeWindows, double timeWindowSize, std::string localParticipant, int minIterations, int maxIterations, CouplingMode cplMode, constants::TimesteppingMethod dtMethod)
std::string _controller
name of the controller participant
std::set< std::string > _receiveInitialFrom
Coupling partners to receive initial data from.
std::map< std::string, m2n::PtrM2N > _m2ns
A vector of m2ns. A m2n is a communication device to the other coupling participant.
void exchangeInitialData() final override
implements functionality for initialize in base class.
bool sendsInitializedDataTo(const std::string &to) const
void addDataToSend(const mesh::PtrData &data, mesh::PtrMesh mesh, bool requiresInitialization, bool exchangeSubsteps, const std::string &to)
Adds data to be sent on data exchange and possibly be modified during coupling iterations.
DataMap & getAccelerationData() final override
interface to provide accelerated data, depending on coupling scheme being used
void exchangeFirstData() final override
Functions needed for advance()
void determineInitialDataExchange() override
Determines which data is initialized and therefore has to be exchanged during initialize.
void initializeReceiveDataStorage() final override
Functions needed for initialize()
std::set< std::string > _sendInitialTo
Coupling partners to send initial data to.
MultiCouplingScheme(double maxTime, int maxTimeWindows, double timeWindowSize, const std::string &localParticipant, std::map< std::string, m2n::PtrM2N > m2ns, const std::string &controller, int minIterations, int maxIterations)
Constructor.
std::map< std::string, DataMap > _sendDataVector
A vector of all data to be sent.
std::vector< std::string > getCouplingPartners() const final override
Returns list of all coupling partners.
bool _isController
if this is the controller or not
void addDataToReceive(const mesh::PtrData &data, mesh::PtrMesh mesh, bool requiresInitialization, bool exchangeSubsteps, const std::string &from)
Adds data to be received on data exchange.
std::map< std::string, DataMap > _receiveDataVector
A vector of all data to be received.
void exchangeSecondData() final override
Exchanges the second set of data.
bool receivesInitializedDataFrom(const std::string &from) const
This class provides a lightweight logger.
Definition Logger.hpp:17
contains implementations of coupling schemes for coupled simulations.
std::map< int, PtrCouplingData > DataMap
provides Mesh, Data and primitives.
std::shared_ptr< Data > PtrData
std::shared_ptr< Mesh > PtrMesh
STL namespace.