109 "full_qualified_name": full_qualified_name,
110 "name": full_qualified_name.split(
"::")[-1],
118 enum ObjectConstruction {
122 {{name}}( ObjectConstruction ):
126 static void sendAndPollDanglingMessages(const {{full_qualified_name}}& message, int destination, int tag, MPI_Comm communicator=tarch::mpi::Rank::getInstance().getCommunicator());
127 static void receiveAndPollDanglingMessages({{full_qualified_name}}& message, int source, int tag, MPI_Comm communicator=tarch::mpi::Rank::getInstance().getCommunicator() );
134 void merge(peano4::grid::TraversalObserver::SendReceiveContext context, const {{full_qualified_name}}& neighbour, const peano4::datamanagement::VertexMarker& marker, int spacetreeId);
136 bool receiveAndMerge(const peano4::datamanagement::VertexMarker& marker) const;
137 bool send(const peano4::datamanagement::VertexMarker& marker) const;
138 static ::peano4::grid::LoadStoreComputeFlag loadStoreComputeFlag(const peano4::datamanagement::VertexMarker& marker);
142 void merge(peano4::grid::TraversalObserver::SendReceiveContext context, const {{full_qualified_name}}& neighbour, const peano4::datamanagement::FaceMarker& marker, int spacetreeId);
144 bool receiveAndMerge(const peano4::datamanagement::FaceMarker& marker) const;
145 bool send(const peano4::datamanagement::FaceMarker& marker) const;
146 static ::peano4::grid::LoadStoreComputeFlag loadStoreComputeFlag(const peano4::datamanagement::FaceMarker& marker);
150 void merge(peano4::grid::TraversalObserver::SendReceiveContext context, const {{full_qualified_name}}& neighbour, const peano4::datamanagement::CellMarker& marker, int spacetreeId);
152 bool receiveAndMerge(const peano4::datamanagement::CellMarker& marker) const;
153 bool send(const peano4::datamanagement::CellMarker& marker) const;
154 static ::peano4::grid::LoadStoreComputeFlag loadStoreComputeFlag(const peano4::datamanagement::CellMarker& marker);
165 return jinja2.Template(result).render(**d)
169 "full_qualified_name": full_qualified_name,
180void {{full_qualified_name}}::sendAndPollDanglingMessages(const {{full_qualified_name}}& message, int destination, int tag, MPI_Comm communicator ) {
181 {{full_qualified_name}}::send(
182 message, destination, tag,
184 tarch::mpi::Rank::getInstance().setDeadlockWarningTimeStamp();
185 tarch::mpi::Rank::getInstance().setDeadlockTimeOutTimeStamp();
188 tarch::mpi::Rank::getInstance().writeTimeOutWarning( "{{full_qualified_name}}", "sendAndPollDanglingMessages()",destination, tag );
189 tarch::mpi::Rank::getInstance().triggerDeadlockTimeOut( "{{full_qualified_name}}", "sendAndPollDanglingMessages()", destination, tag );
190 tarch::services::ServiceRepository::getInstance().receiveDanglingMessages();
197void {{full_qualified_name}}::receiveAndPollDanglingMessages({{full_qualified_name}}& message, int source, int tag, MPI_Comm communicator ) {
198 {{full_qualified_name}}::receive(
199 message, source, tag,
201 tarch::mpi::Rank::getInstance().setDeadlockWarningTimeStamp();
202 tarch::mpi::Rank::getInstance().setDeadlockTimeOutTimeStamp();
205 tarch::mpi::Rank::getInstance().writeTimeOutWarning( "{{full_qualified_name}}", "receiveAndPollDanglingMessages()", source, tag );
206 tarch::mpi::Rank::getInstance().triggerDeadlockTimeOut( "{{full_qualified_name}}", "receiveAndPollDanglingMessages()", source, tag );
207 tarch::services::ServiceRepository::getInstance().receiveDanglingMessages();
218void {{full_qualified_name}}::merge(peano4::grid::TraversalObserver::SendReceiveContext context, const {{full_qualified_name}}& neighbour, const peano4::datamanagement::VertexMarker& marker, int spacetreeId) {
219 {{merge_implementation}}
223bool {{full_qualified_name}}::receiveAndMerge(
224 const peano4::datamanagement::VertexMarker& marker
225 {% for arg in ADDITIONAL_LOAD_STORE_ARGUMENTS %}, const {{arg[0]}}& {{arg[1]}} {% endfor %}
227 return {{receive_predicate}};
231bool {{full_qualified_name}}::send(
232 const peano4::datamanagement::VertexMarker& marker
233 {% for arg in ADDITIONAL_LOAD_STORE_ARGUMENTS %}, const {{arg[0]}}& {{arg[1]}} {% endfor %}
235 return {{send_predicate}};
239::peano4::grid::LoadStoreComputeFlag {{full_qualified_name}}::loadStoreComputeFlag(
240 const peano4::datamanagement::VertexMarker& marker
241 {% for arg in ADDITIONAL_LOAD_STORE_ARGUMENTS %}, const {{arg[0]}}& {{arg[1]}} {% endfor %}
243 return {{load_store_compute_flag}};
248void {{full_qualified_name}}::merge(peano4::grid::TraversalObserver::SendReceiveContext context, const {{full_qualified_name}}& neighbour, const peano4::datamanagement::FaceMarker& marker, int spacetreeId) {
249 {{merge_implementation}}
253bool {{full_qualified_name}}::receiveAndMerge(
254 const peano4::datamanagement::FaceMarker& marker
255 {% for arg in ADDITIONAL_LOAD_STORE_ARGUMENTS %}, const {{arg[0]}}& {{arg[1]}} {% endfor %}
257 return {{receive_predicate}};
261bool {{full_qualified_name}}::send(
262 const peano4::datamanagement::FaceMarker& marker
263 {% for arg in ADDITIONAL_LOAD_STORE_ARGUMENTS %}, const {{arg[0]}}& {{arg[1]}} {% endfor %}
265 return {{send_predicate}};
269::peano4::grid::LoadStoreComputeFlag {{full_qualified_name}}::loadStoreComputeFlag(
270 const peano4::datamanagement::FaceMarker& marker
271 {% for arg in ADDITIONAL_LOAD_STORE_ARGUMENTS %}, const {{arg[0]}}& {{arg[1]}} {% endfor %}
273 return {{load_store_compute_flag}};
278void {{full_qualified_name}}::merge(peano4::grid::TraversalObserver::SendReceiveContext context, const {{full_qualified_name}}& neighbour, const peano4::datamanagement::CellMarker& marker, int spacetreeId) {
279 {{merge_implementation}}
283bool {{full_qualified_name}}::receiveAndMerge(
284 const peano4::datamanagement::CellMarker& marker
285 {% for arg in ADDITIONAL_LOAD_STORE_ARGUMENTS %}, const {{arg[0]}}& {{arg[1]}} {% endfor %}
287 return {{receive_predicate}};
291bool {{full_qualified_name}}::send(
292 const peano4::datamanagement::CellMarker& marker
293 {% for arg in ADDITIONAL_LOAD_STORE_ARGUMENTS %}, const {{arg[0]}}& {{arg[1]}} {% endfor %}
295 return {{send_predicate}};
299::peano4::grid::LoadStoreComputeFlag {{full_qualified_name}}::loadStoreComputeFlag(
300 const peano4::datamanagement::CellMarker& marker
301 {% for arg in ADDITIONAL_LOAD_STORE_ARGUMENTS %}, const {{arg[0]}}& {{arg[1]}} {% endfor %}
303 return {{load_store_compute_flag}};
314 return jinja2.Template(result).render(**d)