5#include "coupling/CouplingMDDefinitions.h"
6#include "coupling/datastructures/CouplingCell.h"
7#include "coupling/datastructures/FlexibleCellContainer.h"
8#include "coupling/indexing/IndexingService.h"
16namespace datastructures {
32 FlexibleCellContainer() {}
34#if (COUPLING_MD_DEBUG == COUPLING_MD_YES)
35 if (couplingCells.size() != idxs.size()) {
36 std::cout <<
"ERROR size of index vector and coupling cell vector sent to FlexibleCellContainer constructor do not match";
41 _idxs.reserve(idxs.size());
42 for (std::size_t i = 0; i < couplingCells.size(); ++i) {
44 _idxs.push_back(idxs[i]);
48 template <
class Container_T> FlexibleCellContainer(Container_T cells) {
49 if constexpr (std::is_same_v<Container_T, FlexibleCellContainer>) {
53 auto numCells = cells.size();
54 _idxs.reserve(numCells);
56 for (
auto pair : cells)
67 std::tie(couplingCell, idx) = pair;
85 using CouplingCellIterator =
typename std::vector<coupling::datastructures::CouplingCell<dim>*>::const_iterator;
86 using IndexIterator = std::vector<I01>::const_iterator;
88 Iterator(CouplingCellIterator itCouplingCells, IndexIterator itIdxs) :
_itCouplingCells(itCouplingCells),
_itIdxs(itIdxs) {}
103 Iterator operator++(
int) {
104 Iterator tmp = *
this;
109 friend bool operator==(
const Iterator& a,
const Iterator& b) {
return a._itCouplingCells == b._itCouplingCells && a._itIdxs == b._itIdxs; }
111 friend bool operator!=(
const Iterator& a,
const Iterator& b) {
return !(a == b); }
defines the cell type with cell-averaged quantities only (no linked cells).
Definition CouplingCell.h:29
Provides iterator functionality (increment, access as <*cell, index> pair, equality)
Definition FlexibleCellContainer.h:83
CouplingCellIterator _itCouplingCells
Definition FlexibleCellContainer.h:115
const std::pair< coupling::datastructures::CouplingCell< dim > *, I01 > operator*() const
Definition FlexibleCellContainer.h:95
IndexIterator _itIdxs
Definition FlexibleCellContainer.h:118
provides access to coupling cells, which may belong to different indexing domains
Definition FlexibleCellContainer.h:30
Iterator begin() const
Definition FlexibleCellContainer.h:121
std::vector< I01 > _idxs
Definition FlexibleCellContainer.h:133
unsigned int size() const
Definition FlexibleCellContainer.h:78
std::vector< coupling::datastructures::CouplingCell< dim > * > _couplingCells
Definition FlexibleCellContainer.h:128
void operator<<(std::pair< coupling::datastructures::CouplingCell< dim > *, I01 > pair)
Definition FlexibleCellContainer.h:64
Iterator end() const
Definition FlexibleCellContainer.h:124
everything necessary for coupling operations, is defined in here
Definition AdditiveMomentumInsertion.h:15