Enable x-dependent coefficients for the SOOA
As a follow-up to a conversation with Carsten today about the design a SecondOrderOperatorAssembler with x-dependent coefficients could follow, I've now come up with a first sort-of-working version.
TL;DR: The code works. There's one place where I'm hardcoding the number of functions that I'm passing. And I had to disable the concept check.
One the one hand, this is the right place to discuss the design decisions again (for Carsten: something where I unintentionally diverged from the plan? for others: General input?)
On the other hand, this the place where I'm asking for help because I'm currently not quite sure how to solve a few issues. They are (marked by FIXME in the diff), in decreasing order of importance:
(line 231): I have the return values of the functions that I passed in a tuple and want to call the contraction on the expanded tuple. In other words, I need the code
Arithmetic::addProduct(localMatrix[i][j], z, contraction_(gradients_[i],
gradients_[j],
std::get<0>(ret),
std::get<1>(ret)));
to work for an arbitrary tuple length.
-I tried to extend the concept check such that it takes the return types of the functions into account but failed. I've no idea what's wrong.
I don't know how, if I passed aGridViewFunction
, I would get alocalView
to bind the element to. Rather than a global basis, I have a local Basis after all. What do I need to do here?Finally, I'd like to understand why I cannot carry out the following replacement:
-auto const numFunctions = Dune::Functions::StaticSize<decltype(ret)>::value;
+auto const numFunctions = Dune::Functions::StaticSize<decltype(functions_)>::value;
To me, those are two instances of TupleVector
s with different template parameters but the same length. Why does the former compile just fine but not the latter?