12#include <dune/functions/common/differentiablefunctionfromcallables.hh>
15#include <Eigen/Sparse>
22 template <
typename... Args>
30template <FESolutions sol, FEParameter para,
typename SV,
typename PM>
39template <
typename TypeListOne,
typename TypeListTwo>
44 static_assert(!
sizeof(TypeListOne),
45 "This type should not be instantiated. check that your arguments satisfies the template below");
51template <
typename... DerivativeArgs,
typename Arg>
63 using Ranges = std::tuple<std::invoke_result_t<DerivativeArgs, const Arg&>..., Dune::Functions::InvalidRange>;
64 using RawRanges = std::tuple<std::remove_cvref_t<std::invoke_result_t<DerivativeArgs, const Arg&>>...,
65 Dune::Functions::InvalidRange>;
67 using Domain = std::remove_cvref_t<Arg>;
68 using Signatures = std::tuple<std::invoke_result_t<DerivativeArgs, const Arg&>(
const Arg&)...,
69 Dune::Functions::InvalidRange(
const Arg&)>;
71 std::tuple<std::remove_cvref_t<std::invoke_result_t<DerivativeArgs, const Arg&>>(std::remove_cvref_t<Arg>)...,
72 Dune::Functions::InvalidRange(std::remove_cvref_t<Arg>)>;
75 using Signature = std::tuple_element_t<I, Signatures>;
78 using Range = std::tuple_element_t<I, Ranges>;
81 using RawRange = std::tuple_element_t<I, RawRanges>;
83 template <
typename Signature>
84 struct DerivativeTraits
87 static constexpr int indexOfSignature = traits::Index<Signature, RawSignatures>::value + 1;
90 using Range = std::tuple_element_t<indexOfSignature, Ranges>;
94template <
typename... DerivativeArgs,
typename Arg>
Contains stl-like type traits.
FEParameter
A strongly typed enum class representing the FE parameter.
Definition: ferequirements.hh:75
FESolutions
A strongly typed enum class representing the type of the solutions vectors.
Definition: ferequirements.hh:88
Definition: assemblermanipulatorbuildingblocks.hh:22
DerivativeTraitsFromCallables(const Impl::Functions< DerivativeArgs... > &derivativesFunctions, Arg &¶meterI) -> DerivativeTraitsFromCallables< Impl::Functions< DerivativeArgs... >, Arg >