#pragma once #include namespace Dune { template class FieldVector; template class FieldMatrix; } namespace AMDiS { namespace tag { struct gradient {}; struct divergence {}; struct partial { std::size_t comp = 0; }; // register possible types for derivative traits struct derivative_type : gradient, divergence, partial {}; } template struct DerivativeTraits; template struct DerivativeTraits : public Dune::Functions::DefaultDerivativeTraits {}; template struct DerivativeTraits { using Range = R; }; template struct DerivativeTraits { // error }; template struct DerivativeTraits(D), tag::divergence> { using Range = K; }; template struct DerivativeTraits(D), tag::divergence> { using Range = Dune::FieldVector; }; } // end namespace AMDiS