3#ifndef DUNE_PDELAB_COMMON_JACOBIANTOCURL_HH
4#define DUNE_PDELAB_COMMON_JACOBIANTOCURL_HH
25 template<
typename Jacobian, std::size_t dimR = Jacobian::rows,
26 std::size_t dimD = Jacobian::cols>
55 template<
typename Jacobian>
58 ( Jacobian::rows == 1 && Jacobian::cols == 2,
"This specialization "
59 "works only for dimRange == 1 and dimDomain == 2");
62 typedef typename Jacobian::block_type CurlField;
63 static const std::size_t dimCurl = 2;
66 void operator()(
const Jacobian& jacobian,
Curl& curl)
const {
67 curl[0] = jacobian[0][1];
68 curl[1] = -jacobian[0][0];
96 template<
typename Jacobian>
99 ( Jacobian::rows == 2 && Jacobian::cols == 2,
"This specialization "
100 "works only for dimRange == 2 and dimDomain == 2");
103 typedef typename Jacobian::block_type CurlField;
104 static const std::size_t dimCurl = 1;
107 void operator()(
const Jacobian& jacobian,
Curl& curl)
const {
108 curl[0] = jacobian[1][0]-jacobian[0][1];
131 template<
typename Jacobian>
134 ( Jacobian::rows == 3 && Jacobian::cols == 3,
"This specialization "
135 "works only for dimRange == 3 and dimDomain == 3");
138 typedef typename Jacobian::block_type CurlField;
139 static const std::size_t dimCurl = 3;
142 void operator()(
const Jacobian& jacobian,
Curl& curl)
const {
143 for(std::size_t alpha = 0; alpha < 3; ++alpha) {
144 std::size_t beta = (alpha+1)%3;
145 std::size_t gamma = (alpha+2)%3;
146 curl[alpha] = jacobian[gamma][beta]-jacobian[beta][gamma];
vector space out of a tensor product of fields.
Definition: fvector.hh:95
extract the curl of a function from the jacobian of that function
Definition: jacobiantocurl.hh:27
Implements a vector constructed from a given type representing a field and a compile-time given size.
Dune namespace.
Definition: alignedallocator.hh:11