30 const std::function<std::vector<double>(std::vector<double>, std::vector<std::array<unsigned int, dim>>)>* applyScalar,
31 const std::function<std::vector<std::array<double, dim>>(std::vector<std::array<double, dim>>, std::vector<std::array<unsigned int, dim>>)>* applyVector)
33 _applyVector(applyVector) {
35 if (applyScalar ==
nullptr or applyVector ==
nullptr)
36 throw std::runtime_error(
"ERROR: FilterFromFunction received nullptr as function pointer!");
40 std::array<unsigned int, dim> stlIndex;
41 for (
unsigned int i = 0; i < inputCellVector.size(); i++) {
44 using coupling::indexing::IndexTrait;
45 mamicoIndex = coupling::indexing::convertToVector<dim>(I14{i});
47 for (
unsigned int d = 0; d < dim; d++)
48 stlIndex[d] = mamicoIndex[d];
49 _stlIndices.push_back(stlIndex);
53 ~FilterFromFunction() {
59 std::vector<double> input_s;
60 std::vector<std::array<double, dim>> input_v;
68 for (
const auto scalarProperty : coupling::filtering::FilterInterface<dim>::_scalarAccessFunctionPairs) {
74 input_s.push_back((cell->*scalarProperty.get)());
86 std::vector<double> output_s = {};
87 if (input_s.size() > 0)
88 output_s = (*_applyScalar)(input_s, _stlIndices);
95 for (
unsigned int i = 0; i < coupling::filtering::FilterInterface<dim>::_inputCells.size(); i++) {
96 (coupling::filtering::FilterInterface<dim>::_outputCells[i]->*scalarProperty.set)(output_s[i]);
103 for (
const auto vectorProperty : coupling::filtering::FilterInterface<dim>::_vectorAccessFunctionPairs) {
113 std::array<double, dim> array_vec;
114 for (
unsigned int d = 0; d < dim; d++)
115 array_vec[d] = mamico_vec[d];
116 input_v.push_back(array_vec);
126 std::vector<std::array<double, dim>> output_v = {};
127 if (input_v.size() > 0)
128 output_v = (*_applyVector)(input_v, _stlIndices);
135 for (
unsigned int i = 0; i < coupling::filtering::FilterInterface<dim>::_inputCells.size(); i++) {
137 for (
unsigned int d = 0; d < dim; d++)
138 mamico_vec[d] = output_v[i][d];
139 (coupling::filtering::FilterInterface<dim>::_outputCells[i]->*vectorProperty.set)(mamico_vec);
150 std::vector<std::array<unsigned int, dim>> _stlIndices;
153 const std::function<std::vector<double>(std::vector<double>, std::vector<std::array<unsigned int, dim>>)>* _applyScalar;
154 const std::function<std::vector<std::array<double, dim>>(std::vector<std::array<double, dim>>, std::vector<std::array<unsigned int, dim>>)>* _applyVector;