Skip to content
Snippets Groups Projects

Feature/multitype arithmetic

Merged maxka requested to merge feature/multitype-arithmetic into master
1 file
+ 20
34
Compare changes
  • Side-by-side
  • Inline
+ 20
34
@@ -115,18 +115,13 @@ namespace MatrixVector {
@@ -115,18 +115,13 @@ namespace MatrixVector {
class ADummy = A,
class ADummy = A,
std::enable_if_t<MatrixTraits<ADummy>::isMatrix, int> SFINAE_Dummy = 0>
std::enable_if_t<MatrixTraits<ADummy>::isMatrix, int> SFINAE_Dummy = 0>
static void addProduct(A& a, const B& b, const C& c) {
static void addProduct(A& a, const B& b, const C& c) {
typename B::ConstRowIterator bi = b.begin();
rangeForEach(b, [&](auto&& bi, auto&& i) {
typename B::ConstRowIterator bEnd = b.end();
rangeForEach(bi, [&](auto&& bik, auto&& k) {
for (; bi != bEnd; ++bi) {
rangeForEach(c[k], [&](auto&& ckj, auto&& j) {
typename B::ConstColIterator bik = bi->begin();
Dune::MatrixVector::addProduct(a[i][j], bik, ckj);
typename B::ConstColIterator biEnd = bi->end();
});
for (; bik != biEnd; ++bik) {
});
typename C::ConstColIterator ckj = c[bik.index()].begin();
});
typename C::ConstColIterator ckEnd = c[bik.index()].end();
for (; ckj != ckEnd; ++ckj)
a[bi.index()][ckj.index()] += (*bik) * (*ckj);
}
}
}
}
};
};
@@ -146,18 +141,13 @@ namespace MatrixVector {
@@ -146,18 +141,13 @@ namespace MatrixVector {
class ADummy = A,
class ADummy = A,
std::enable_if_t<MatrixTraits<ADummy>::isMatrix, int> SFINAE_Dummy = 0>
std::enable_if_t<MatrixTraits<ADummy>::isMatrix, int> SFINAE_Dummy = 0>
static void addProduct(A& a, const Scalar& scalar, const B& b, const C& c) {
static void addProduct(A& a, const Scalar& scalar, const B& b, const C& c) {
typename B::ConstRowIterator bi = b.begin();
rangeForEach(b, [&](auto&& bi, auto&& i) {
typename B::ConstRowIterator bEnd = b.end();
rangeForEach(bi, [&](auto&& bik, auto&& k) {
for (; bi != bEnd; ++bi) {
rangeForEach(c[k], [&](auto&& ckj, auto&& j) {
typename B::ConstColIterator bik = b[bi.index()].begin();
Dune::MatrixVector::addProduct(a[i][j], scalar, bik, ckj);
typename B::ConstColIterator biEnd = b[bi.index()].end();
});
for (; bik != biEnd; ++bik) {
});
typename C::ConstColIterator ckj = c[bik.index()].begin();
});
typename C::ConstColIterator ckEnd = c[bik.index()].end();
for (; ckj != ckEnd; ++ckj)
a[bi.index()][ckj.index()] += scalar * (*bik) * (*ckj);
}
}
}
}
};
};
@@ -344,7 +334,7 @@ namespace MatrixVector {
@@ -344,7 +334,7 @@ namespace MatrixVector {
static void addProduct(A& a, const B& b, const C& c) {
static void addProduct(A& a, const B& b, const C& c) {
rangeForEach(c, [&](auto&& ci, auto && i) {
rangeForEach(c, [&](auto&& ci, auto && i) {
rangeForEach(ci, [&](auto&& cij, auto && j) {
rangeForEach(ci, [&](auto&& cij, auto && j) {
addProduct(a[i][j], b, cij);
Dune::MatrixVector::addProduct(a[i][j], b, cij);
});
});
});
});
}
}
@@ -367,15 +357,11 @@ namespace MatrixVector {
@@ -367,15 +357,11 @@ namespace MatrixVector {
class ADummy = A,
class ADummy = A,
std::enable_if_t<MatrixTraits<ADummy>::isMatrix, int> SFINAE_Dummy = 0>
std::enable_if_t<MatrixTraits<ADummy>::isMatrix, int> SFINAE_Dummy = 0>
static void addProduct(A& a, const Scalar& scalar, const B& b, const C& c) {
static void addProduct(A& a, const Scalar& scalar, const B& b, const C& c) {
typename C::ConstRowIterator ci = c.begin();
rangeForEach(c, [&](auto&& ci, auto&& i) {
typename C::ConstRowIterator cEnd = c.end();
rangeForEach(ci, [&](auto&& cij, auto&& j) {
for (; ci != cEnd; ++ci) {
Dune::MatrixVector::addProduct(a[i][j], scalar, b, cij);
typename C::ConstColIterator cik = c[ci.index()].begin();
});
typename C::ConstColIterator ciEnd = c[ci.index()].end();
});
for (; cik != ciEnd; ++cik) {
a[ci.index()][cik.index()] += scalar * b * (*cik);
}
}
}
}
};
};
Loading