34 FilterJunction(
const char* name,
36#
if (COUPLING_MD_PARALLEL == COUPLING_MD_YES)
39 std::array<bool, 7> filteredValues)
41#
if (COUPLING_MD_PARALLEL == COUPLING_MD_YES)
46 throw std::runtime_error(
"ERROR: Creating FilterJunction with inputc = 0.");
48#ifdef DEBUG_FILTER_JUNCTION
49 std::cout << PRINT_PREFIX() <<
"This is a FilterJunction. Number of inputs:" << inputc << std::endl;
53 unsigned int partitionSize = coupling::filtering::FilterSequence<dim>::_inputCellVector.size() / inputc;
55 for (
unsigned int p = 0; p < inputc; p++) {
57 _inputCellVector_parted[p] = std::vector<coupling::datastructures::CouplingCell<dim>*>(
58 coupling::filtering::FilterSequence<dim>::_inputCellVector.begin() + (p * partitionSize),
59 coupling::filtering::FilterSequence<dim>::_inputCellVector.begin() + ((p + 1) * partitionSize));
60#ifdef DEBUG_FILTER_JUNCTION
61 std::cout << PRINT_PREFIX() <<
"Size of _inputCellVector_parted[" << p <<
"]: " << _inputCellVector_parted[p].size() << std::endl;
65 _cellVector1_parted[p] =
66 std::vector<coupling::datastructures::CouplingCell<dim>*>(coupling::filtering::FilterSequence<dim>::_cellVector1.begin() + (p * partitionSize),
67 coupling::filtering::FilterSequence<dim>::_cellVector1.begin() + ((p + 1) * partitionSize));
68#ifdef DEBUG_FILTER_JUNCTION
69 std::cout << PRINT_PREFIX() <<
"Size of _cellVector1_parted[" << p <<
"]: " << _cellVector1_parted[p].size() << std::endl;
73 _cellVector2_parted[p] =
74 std::vector<coupling::datastructures::CouplingCell<dim>*>(coupling::filtering::FilterSequence<dim>::_cellVector2.begin() + (p * partitionSize),
75 coupling::filtering::FilterSequence<dim>::_cellVector2.begin() + ((p + 1) * partitionSize));
76#ifdef DEBUG_FILTER_JUNCTION
77 std::cout << PRINT_PREFIX() <<
"Size of _cellVector2_parted[" << p <<
"]: " << _cellVector2_parted[p].size() << std::endl;
81 coupling::filtering::FilterSequence<dim>::_isModifiable =
false;
90 const std::function<std::vector<double>(std::vector<double>, std::vector<std::array<unsigned int, dim>>)>* applyScalar,
91 const std::function<std::vector<std::array<double, dim>>(std::vector<std::array<double, dim>>, std::vector<std::array<unsigned int, dim>>)>* applyVector,
92 int filterIndex = -1)
override {
94#ifdef DEBUG_FILTER_JUNCTION
95 std::cout << PRINT_PREFIX()
96 <<
"This is a FilterJunction. addFilter(...) is not supported "
112 const std::vector<coupling::datastructures::CouplingCell<dim>*>& getOutputCellVector(
unsigned int outputIndex = 0)
const override {
113 if (outputIndex >= inputc) {
114 std::cout << PRINT_PREFIX() <<
"ERROR: getOutputCellVector: Requested output index(" << outputIndex <<
") too high. (partitions: )" << inputc
119 if (coupling::filtering::FilterSequence<dim>::_filters.empty())
120 std::cout << PRINT_PREFIX() <<
"Warning: Accessing cell vectors while _filters is empty." << std::endl;
121 if (coupling::filtering::FilterSequence<dim>::_filters.size() % 2 == 0)
122 return _cellVector1_parted[0];
124 return _cellVector2_parted[0];
127 void printFilters()
override {
128 std::cout <<
"Junctors in junction " << coupling::filtering::FilterSequence<dim>::_name <<
": ";
129 for (
auto f : coupling::filtering::FilterSequence<dim>::_filters)
130 std::cout << f->getType() <<
" ";
131 std::cout << std::endl;
134 std::string PRINT_PREFIX()
const override {
135 return std::string(
" FJ(").std::string::append(coupling::filtering::FilterSequence<dim>::_name).std::string::append(
"): ");
140 std::array<std::vector<coupling::datastructures::CouplingCell<dim>*>, inputc> _inputCellVector_parted;
141 std::array<std::vector<coupling::datastructures::CouplingCell<dim>*>, inputc> _cellVector1_parted;
142 std::array<std::vector<coupling::datastructures::CouplingCell<dim>*>, inputc> _cellVector2_parted;