4 #ifndef DUNE_LOCALFUNCTIONS_WHITNEY_EDGES0_5_BASIS_HH 5 #define DUNE_LOCALFUNCTIONS_WHITNEY_EDGES0_5_BASIS_HH 10 #include <dune/common/fmatrix.hh> 11 #include <dune/common/fvector.hh> 33 template<
class Geometry,
class RF>
35 private EdgeS0_5Common<Geometry::mydimension, typename Geometry::ctype>
48 typedef FieldVector<RangeField, dimRange>
Range;
50 typedef FieldMatrix<RangeField, dimRange, dimDomainGlobal>
Jacobian;
62 static const P1LocalBasis& p1LocalBasis;
70 std::vector<typename P1Basis::Traits::Jacobian> p1j;
72 std::vector<typename Traits::DomainField> edgel;
82 template<
typename VertexOrder>
90 P1Basis(p1LocalBasis, geo).evaluateJacobian(xl, p1j);
93 for(std::size_t i = 0; i <
s; ++i) {
94 edgel[i] = (geo.corner(
refelem.subEntity(i,dim-1,0,dim))-
95 geo.corner(
refelem.subEntity(i,dim-1,1,dim))
97 const typename VertexOrder::iterator& edgeVertexOrder =
98 vertexOrder.begin(dim-1, i);
99 if(edgeVertexOrder[0] > edgeVertexOrder[1])
105 std::size_t
size ()
const {
return s; }
109 std::vector<typename Traits::Range>& out)
const 115 std::vector<typename P1LocalBasis::Traits::RangeType> p1v;
118 for(std::size_t i = 0; i <
s; i++) {
119 const std::size_t i0 =
refelem.subEntity(i,dim-1,0,dim);
120 const std::size_t i1 =
refelem.subEntity(i,dim-1,1,dim);
121 out[i].axpy( p1v[i0], p1j[i1][0]);
122 out[i].axpy(-p1v[i1], p1j[i0][0]);
129 std::vector<typename Traits::Jacobian>& out)
const 133 for(std::size_t i = 0; i <
s; i++) {
134 const std::size_t i0 =
refelem.subEntity(i,dim-1,0,dim);
135 const std::size_t i1 =
refelem.subEntity(i,dim-1,1,dim);
136 for(std::size_t j = 0; j < dim; j++)
137 for(std::size_t k = 0; k < dim; k++)
138 out[i][j][k] = edgel[i] *
139 (p1j[i0][0][k]*p1j[i1][0][j]-p1j[i1][0][k]*p1j[i0][0][j]);
144 std::size_t
order ()
const {
return 1; }
147 template<
class Geometry,
class RF>
153 #endif // DUNE_LOCALFUNCTIONS_WHITNEY_EDGES0_5_BASIS_HH static const std::size_t diffOrder
Definition: whitney/edges0.5/basis.hh:52
RF RangeField
Definition: whitney/edges0.5/basis.hh:46
FieldVector< DomainField, dimDomainLocal > DomainLocal
Definition: whitney/edges0.5/basis.hh:43
std::size_t size() const
number of shape functions
Definition: whitney/edges0.5/basis.hh:105
static const ReferenceElement< DF, dim > & refelem
The reference element for this edge element.
Definition: common.hh:17
EdgeS0_5Basis(const Geometry &geo, const VertexOrder &vertexOrder)
Construct an EdgeS0_5Basis.
Definition: whitney/edges0.5/basis.hh:83
Linear Lagrange shape functions on the simplex.
Definition: p1localbasis.hh:26
void evaluateFunction(const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const
Evaluate all shape functions.
Definition: p1localbasis.hh:40
Geometry::ctype DomainField
Definition: whitney/edges0.5/basis.hh:40
Basis for order 0.5 (lowest order) edge elements on simplices.
Definition: whitney/edges0.5/basis.hh:34
void evaluateFunction(const typename Traits::DomainLocal &xl, std::vector< typename Traits::Range > &out) const
Evaluate all shape functions.
Definition: whitney/edges0.5/basis.hh:108
static const std::size_t dimDomainLocal
Definition: whitney/edges0.5/basis.hh:41
void evaluateJacobian(const typename Traits::DomainLocal &, std::vector< typename Traits::Jacobian > &out) const
Evaluate all Jacobians.
Definition: whitney/edges0.5/basis.hh:128
FieldMatrix< RangeField, dimRange, dimDomainGlobal > Jacobian
Definition: whitney/edges0.5/basis.hh:50
static const std::size_t s
The number of base functions.
Definition: common.hh:23
Definition: brezzidouglasmarini1cube2dlocalbasis.hh:14
Common base class for edge elements.
Definition: common.hh:15
static const std::size_t dimRange
Definition: whitney/edges0.5/basis.hh:47
static const std::size_t dimDomainGlobal
Definition: whitney/edges0.5/basis.hh:42
std::size_t order() const
Polynomial order of the shape functions.
Definition: whitney/edges0.5/basis.hh:144
export type traits for function signature
Definition: whitney/edges0.5/basis.hh:39
FieldVector< RangeField, dimRange > Range
Definition: whitney/edges0.5/basis.hh:48
Convert a simple scalar local basis into a global basis.
Definition: localtoglobaladaptors.hh:65
FieldVector< DomainField, dimDomainGlobal > DomainGlobal
Definition: whitney/edges0.5/basis.hh:44