13#ifndef BANK_WEISER_EST_HH
14#define BANK_WEISER_EST_HH
16#include "dune/grid/common/quadraturerules.hh"
38 template <
int Id,
int PDEId,
int SpaceId,
int components>
41 static int const id = Id;
44 static int const m = components;
50 static int const indQ[10] = {0,1,2,3,4,5,6,7,8,9};
51 static int const indQFull[10] = {0,1,2,3,4,5,6,7,8,9};
53 static bool normalize =
true;
66 static const int value = (dim+1)+3*(dim-1);
72 static const int value = (dim+1)+3*(dim-1);
75 template <
class LocalInd,
class RT,
class Cache,
int dim,
class Evaluators>
82 Cache
const& cacheNeigh_,
87 modarg.gradient[0]=outernormal;
90 template <
class Variable>
93 for(
int row=0; row<
localInd[Variable::id].size; ++row)
95 *boost::fusion::at_c<Variable::spaceIndex>(
evaluators).evalData[indQ[row]].value[0];
106 template <
class LocalInd,
class RT,
class Cache,
class BoundaryCache,
int dim,
class Evaluators>
110 RT& integrationElement,
113 BoundaryCache
const& cacheBoundary_,
122 modarg.gradient[0]=outernormal;
125 template <
class Variable>
129 for(
int row=0; row<
localInd[Variable::id].size; ++row)
133 *boost::fusion::at_c<Variable::spaceIndex>(
evaluators).evalData[indQ[row]].value[0];
144 template <
class LocalRHS,
class RT,
class Cache,
class Evaluators>
147 static const int dim = boost::fusion::result_of::value_at_c<Evaluators,0>::type::Space::dim;
153 template <
class Variable>
156 size_t n = (
localRHS[Variable::id]).N();
157 for(
int row=0; row<n; ++row)
160 -=
intEl *
cache.template d1<Variable::pdeid>(boost::fusion::at_c<Variable::spaceIndex>(
evaluators).evalData[row]);
171 template <
class LocalRHS,
class RT,
class Cache,
class Evaluators>
174 static const int dim = boost::fusion::result_of::value_at_c<Evaluators,0>::type::Space::dim;
180 template <
class Variable>
185 size_t n = (
localRHS[Variable::id]).N();
186 for(
int row=0; row<n; ++row)
188 modarg1.gradient[0]=boost::fusion::at_c<Variable::spaceIndex>(
evaluators).evalData[indQ[row]].gradient[0];
200 template <
class LocalInd,
class RT,
class Cache,
int dim,
class Evaluators>
207 Cache
const& cacheNeigh_,
212 modarg.gradient[0]=outernormal;
215 template <
class Variable>
218 for(
int row=0; row<
localInd[Variable::id].size; ++row)
220 *boost::fusion::at_c<Variable::spaceIndex>(
evaluators).evalData[indQ[row]].value[0];
232 template <
class LocalInd,
class RT,
class Cache,
class BoundaryCache,
int dim,
class Evaluators>
236 RT& integrationElement,
239 BoundaryCache
const& cacheBoundary_,
248 modarg.gradient[0]=outernormal;
251 template <
class Variable>
255 for(
int row=0; row<
localInd[Variable::id].size; ++row)
259 *boost::fusion::at_c<Variable::spaceIndex>(
evaluators).evalData[indQ[row]].value[0];
262 for(
int row=0; row<
localInd[Variable::id].size; ++row)
266 *boost::fusion::at_c<Variable::spaceIndex>(
evaluators).evalData[indQ[row]].value[0];
277 template <
class LocalVector,
class LocalMatrix>
287 template <
class Variable>
293 int n(
b[Variable::id].N());
295 for(
int i=0; i<n; ++i) sum+=
b[Variable::id][i];
297 for(
int i=0; i<n; ++i)
b[Variable::id][i]-=sum;
301 A.solve(
c[Variable::id],
b[Variable::id]);
305 std::cout <<
"Warning: Factorization failed: setting indicator to zero!" << std::endl;
306 for(
int i =0; i<
c[Variable::id].N();++i)
307 c[Variable::id][i]=0.0;
317 template <
class LocalMatrix,
class Evaluators,
class RT,
class Cache>
320 static const int dim = boost::fusion::result_of::value_at_c<Evaluators,0>::type::Space::dim;
324 size_t n = (localmatrix[0]).N();
325 for(
int row=0; row<n; ++row)
326 for (
size_t i=0; i<n; ++i)
328 modarg1.gradient[0]=boost::fusion::at_c<0>(evaluators).evalData[indQ[row]].gradient[0];
329 modarg2.gradient[0]=boost::fusion::at_c<0>(evaluators).evalData[indQ[i]].gradient[0];
332 += 1e-3*intEl*boost::fusion::at_c<0>(evaluators).evalData[indQ[row]].value[0]*
333 boost::fusion::at_c<0>(evaluators).evalData[indQ[i]].value[0];
334 localmatrix[row][i]+= intEl*cache.template d2<0,1>(modarg1,modarg2);
341 template <
class LocalVector,
class Evaluators,
class RT>
344 size_t n = (localvector).N();
345 for (
size_t i=0; i<n; ++i)
348 += intEl*boost::fusion::at_c<0>(evaluators).evalData[indQ[i]].value[0];
352 template <
class LocalSolution,
class Evaluators,
class GlobalSolution>
359 template <
class Variable>
363 typename result_of::value_at_c<Evaluators,Variable::spaceIndex>::type
const& reval = at_c<Variable::spaceIndex>(
eval);
364 assert(indQ[
localSolution[Variable::id].N()-1]<reval.size());
384 template <
class VariableDescriptions,
int sysdim,
class Result,
class F,
class Spaces,
class ExtendedSpaces>
387 Spaces
const& spaces,
388 ExtendedSpaces
const& extendedSpaces)
391 using namespace Dune;
393 VariableDescriptions
const varDesc;
398 typedef typename Grid::ctype CoordType;
399 int const dim = Grid::dimension;
401 IndexSet
const& indexSet = at_c<0>(spaces)->grid().leafIndexSet();
406 SfCache sfCache,sfCacheN, sfCacheT;
410 typedef typename result_of::as_vector<
411 typename result_of::transform<Spaces, GetEvaluators<SfCache> >::type
414 typedef typename result_of::as_vector<typename result_of::transform<ExtendedSpaces, GetEvaluators<SfCache> >::type>::type ExtendedEvaluators;
421 typedef typename IndexSet::template Codim<0>::template Partition<All_Partition>::Iterator CellIterator;
422 typedef typename CellIterator::Entity::LeafIntersectionIterator LII;
423 typedef typename CellIterator::Entity Entity;
425 typename F::DomainCache domainCache(f.createDomainCache(6+8));
426 typename F::DomainCache domainCacheNeigh(f.createDomainCache(6+8));
427 typename F::BoundaryCache boundaryCache(f.createBoundaryCache(6+8));
429 const int ssize = result_of::size<VariableDescriptions>::type::value;
438 CellIterator end = indexSet.template end<0,All_Partition>();
439 for (CellIterator ci=indexSet.template begin<0,All_Partition>(); ci!=end; ++ci) {
441 domainCache.moveTo(*ci);
445 int const shapeFunctionMaxOrder =
maxOrder(evaluators);
446 shapeFunctionMaxOrder =
std::max(shapeFunctionMaxOrder,
maxOrder(extendedEvaluators));
447 int const p = f.integrationOrder(*ci,shapeFunctionMaxOrder,
false);
448 int const pb = f.integrationOrder(*ci,shapeFunctionMaxOrder,
true);
450 LII faceEnd = ci->ileafend();
454 for(
int i=0; i<ssize; ++i) { b[i]=0; c[i]=0; }
456 GeometryType gti = ci->type();
460 size_t nQuadPosi = qri.size();
461 for (
size_t g=0; g<nQuadPosi; ++g) {
466 domainCache.evaluateAt(quadPos,evaluators);
467 CoordType weightTimesDetJac(ci->geometry().integrationElement(quadPos));
468 weightTimesDetJac *= qri[g].weight();
473 (b, weightTimesDetJac,domainCache, extendedEvaluators));
476 for (LII face=ci->ileafbegin(); face!=faceEnd; ++face) {
477 if(face.neighbor()) {
479 typename LII::EntityPointer o=face.outside();
480 domainCacheNeigh.moveTo(*o);
483 }
else if(face.boundary())
485 boundaryCache.moveTo(face);
487 GeometryType gt=face.intersectionSelfLocal().type();
488 QuadratureRule<CoordType, dim-1>
const& qr=QuadratureRules<CoordType,dim-1>::rule(gt,pb);
489 size_t nQuadPos=qr.size();
490 for(
size_t g=0; g<nQuadPos; ++g){
491 FieldVector<CoordType, dim-1>
const& quadPos = qr[g].position();
495 domainCache.evaluateAt(quadPosInSelf,evaluators);
497 outerNormal *= qr[g].weight();
503 domainCacheNeigh.evaluateAt(quadPosInNeigh,evaluatorsNeigh);
505 (b,outerNormal,domainCache,domainCacheNeigh, extendedEvaluators));
507 }
else if(face.boundary())
509 boundaryCache.evaluateAt(quadPos,evaluators);
511 CoordType weightTimesDetJac = face.intersectionGlobal().integrationElement(quadPos);
512 weightTimesDetJac *= qr[g].weight();
514 (b, weightTimesDetJac, outerNormal, domainCache, boundaryCache, extendedEvaluators));
518 for(
int i=0; i<sysdim; ++i)
for(
int j=0; j<sysdim; ++j) A[i][j] += rk1[i]*rk1[j];
524 template <
class LocalMatrix,
class Evaluators,
class RT,
class Cache,
class Row>
527 static const int dim = boost::fusion::result_of::value_at_c<Evaluators,0>::type::Space::dim;
537 for(
int row=0; row<n; ++row)
538 for (
size_t col=0; col<n; ++col)
542 +=
intEl*
cache.template d2<Row::id,Col::id>(boost::fusion::at_c<Row::spaceIndex>(
evaluators).evalData[indQFull[row]],
543 boost::fusion::at_c<Col::spaceIndex>(
evaluators).evalData[indQFull[col]]);
553 template <
class LocalMatrix,
class Evaluators,
class RT,
class Cache,
class VarDesc>
556 static const int dim = boost::fusion::result_of::value_at_c<Evaluators,0>::type::Space::dim;
577 template <
class LocalVector,
class LocalMatrix>
585 for(
int row=0; row < 2; ++row)
588 for(
int i=0; i<n; ++i) sum+=b[i+n*row];
590 for(
int i=0; i<n; ++i) b[i+n*row]-=sum;
595 template <
class LocalRHS,
class RT,
class Cache,
class Evaluators>
603 template <
class Variable>
607 for(
int row=0; row<n; ++row)
610 -=
intEl *
cache.template d1<Variable::id>(boost::fusion::at_c<Variable::spaceIndex>(
evaluators).evalData[indQFull[row]]);
619 template <
class LocalSolution,
class Evaluators,
class GlobalSolution>
626 template <
class Variable>
630 typename result_of::value_at_c<Evaluators,Variable::spaceIndex>::type
const& reval = at_c<Variable::spaceIndex>(
eval);
632 for (
size_t i=0; i<n; i++)
642 template <
class LocalInd,
class RT,
class Cache,
int dim,
class Evaluators>
649 Cache
const& cacheNeigh_,
654 modarg.gradient[0]=outernormal;
657 template <
class Variable>
662 for(
int row=0; row<n; ++row)
664 *boost::fusion::at_c<Variable::spaceIndex>(
evaluators).evalData[indQFull[row]].value[0];
674 template <
class LocalInd,
class RT,
class Cache,
class BoundaryCache,
int dim,
class Evaluators>
678 RT& integrationElement,
681 BoundaryCache
const& cacheBoundary_,
690 modarg.gradient[0]=outernormal;
693 template <
class Variable>
698 for(
int row=0; row< n; ++row)
702 *boost::fusion::at_c<Variable::spaceIndex>(
evaluators).evalData[indQFull[row]].value[0];
705 for(
int row=0; row< n; ++row)
709 *boost::fusion::at_c<Variable::spaceIndex>(
evaluators).evalData[indQFull[row]].value[0];
732 template <
class VariableDescriptions,
int sysdim,
class Result,
class F,
class FS,
class Spaces,
class ExtendedSpaces>
736 Spaces
const& spaces,
737 ExtendedSpaces
const& extendedSpaces)
740 using namespace Dune;
742 VariableDescriptions
const varDesc;
747 typedef typename Grid::ctype CoordType;
748 int const dim = Grid::dimension;
750 IndexSet
const& indexSet = at_c<0>(spaces)->grid().leafIndexSet();
755 SfCache sfCache,sfCacheN, sfCacheT;
759 typedef typename result_of::as_vector<
760 typename result_of::transform<Spaces, GetEvaluators<SfCache> >::type
763 typedef typename result_of::as_vector<typename result_of::transform<ExtendedSpaces, GetEvaluators<SfCache> >::type>::type ExtendedEvaluators;
770 typedef typename IndexSet::template Codim<0>::template Partition<All_Partition>::Iterator CellIterator;
771 typedef typename CellIterator::Entity::LeafIntersectionIterator LII;
772 typedef typename CellIterator::Entity Entity;
774 typename F::DomainCache domainCache(f.createDomainCache(6+8));
775 typename FS::DomainCache domainCacheNeigh(fs.createDomainCache(6+8));
776 typename FS::DomainCache domainCacheSimpl(fs.createDomainCache(6+8));
777 typename FS::BoundaryCache boundaryCache(fs.createBoundaryCache(6+8));
787 CellIterator end = indexSet.template end<0,All_Partition>();
788 for (CellIterator ci=indexSet.template begin<0,All_Partition>(); ci!=end; ++ci) {
791 domainCache.moveTo(*ci);
792 domainCacheSimpl.moveTo(*ci);
796 int const shapeFunctionMaxOrder =
maxOrder(evaluators);
797 shapeFunctionMaxOrder =
std::max(shapeFunctionMaxOrder,
maxOrder(extendedEvaluators));
798 int const p = f.integrationOrder(*ci,shapeFunctionMaxOrder,
false);
799 int const pb = f.integrationOrder(*ci,shapeFunctionMaxOrder,
true);
801 LII faceEnd = ci->ileafend();
803 GeometryType gti = ci->type();
807 size_t nQuadPosi = qri.size();
808 for (
size_t g=0; g<nQuadPosi; ++g) {
813 domainCache.evaluateAt(quadPos,evaluators);
814 CoordType weightTimesDetJac(ci->geometry().integrationElement(quadPos));
815 weightTimesDetJac *= qri[g].weight();
817 (A,weightTimesDetJac, extendedEvaluators, domainCache));
819 (b, weightTimesDetJac,domainCache, extendedEvaluators));
822 for (LII face=ci->ileafbegin(); face!=faceEnd; ++face) {
823 if(face.neighbor()) {
825 typename LII::EntityPointer o=face.outside();
826 domainCacheNeigh.moveTo(*o);
829 }
else if(face.boundary())
831 boundaryCache.moveTo(face);
833 GeometryType gt=face.intersectionSelfLocal().type();
834 QuadratureRule<CoordType, dim-1>
const& qr=QuadratureRules<CoordType,dim-1>::rule(gt,pb);
835 size_t nQuadPos=qr.size();
836 for(
size_t g=0; g<nQuadPos; ++g){
837 FieldVector<CoordType, dim-1>
const& quadPos = qr[g].position();
841 domainCacheSimpl.evaluateAt(quadPosInSelf,evaluators);
843 outerNormal *= qr[g].weight();
849 domainCacheNeigh.evaluateAt(quadPosInNeigh,evaluatorsNeigh);
851 (b,outerNormal,domainCacheSimpl,domainCacheNeigh, extendedEvaluators));
853 }
else if(face.boundary())
855 boundaryCache.evaluateAt(quadPos,evaluators);
857 CoordType weightTimesDetJac = face.intersectionGlobal().integrationElement(quadPos);
858 weightTimesDetJac *= qr[g].weight();
860 (b, weightTimesDetJac, outerNormal, domainCacheSimpl, boundaryCache, extendedEvaluators));
870 template<
class Description,
class Gr
id,
class Functional,
class FunctionalSimpl>
888 template<
class Spaces>
891 edgeAveraging<Description,syst>(recovery, vf, spaces, recovery.
descriptions.spaces);
894 template<
class Spaces>
897 edgeAveragingFull<Description,systFull>(recovery, vf, vfs, spaces, recovery.
descriptions.spaces);
902 template<
class Description,
class Function,
class Functional>
906 typedef typename Function::Grid Grid;
909 using namespace FunctionViews;
912 RecoverySpace rspace(at_c<0>(f.vars).space().gridManager(),at_c<0>(f.vars).space().indexSet(),2);
913 RecoverySpace r1space(at_c<0>(f.vars).space().gridManager(),at_c<0>(f.vars).space().indexSet(),1);
914 typedef boost::fusion::vector<RecoverySpace const*> RecoverySpaces;
915 RecoverySpaces rspaces(&rspace);
923 RecoveryRepresentation recovery(variableSet);
924 int const dim(Space::dim);
927 edgeAveraging<Description,syst>(recovery, vf, f.descriptions.spaces, rspaces);
930 typename RecoverySpace::template Element<dim>::type gradientFkt(r1space);
931 interpolateGloballyWeak<PlainAverage>(gradientFkt,makeView<Gradient>(at_c<0>(recovery.vars)));
935 errorIndicator(localIntegral(
936 makeView<AbsSquare>(gradientFkt)
937 ,at_c<0>(f.vars).space())
939 return errorIndicator;
Function is the interface for evaluatable functions .
Obtain an error function by solving local Neumann problems in the flavour of Bank/Weiser.
std::vector< CellDataPair > CellDataVector
A representation of a finite element function space defined over a domain covered by a grid.
A boost::fusion functor for creating an evaluator from the space, using a shape function cache that i...
Create a CellData by computing local integrals over each Cell.
Providing a matrix or array interface to LAPACK-ordered entries.
Providing a vector interface for contiguously stored entries.
This class caches values and derivatives of shape functions at quadrature points.
A class that stores information about a set of variables.
A class for storing a heterogeneous collection of FunctionSpaceElement s.
VariableSet(Self const &vs)
Copy constructor.
Descriptions const & descriptions
Descriptions of variable set, of type VariableSetDescription (lots of useful infos)
Tools for transfer of data between grids.
Some useful views on FunctionSpaceElement s.
Two classes for the visualization of higher order grid functions.
GradientAverage(LocalInd &localInd_, Dune::FieldVector< RT, dim >const &outernormal, Cache const &cache_, Cache const &cacheNeigh_, Evaluators const &evaluators_)
VariationalArg< RT, dim > modargTest
RecoveryVariableSet::VariableSet RecoveryRepresentation
boost::fusion::vector< RecoverySpace const * > RecoverySpaces
void edgeAveragingFull(Result &result, F const &f, FS const &fs, Spaces const &spaces, ExtendedSpaces const &extendedSpaces)
Computes an error representation function, which is useful for goal oriented adaptivity.
VariationalArg< RT, dim > modarg
LocalNormalMatrixRow(LocalMatrix &localmatrix_, RT intEl_, Evaluators const &evaluators_, Cache const &cache_)
GradientAverageFull(LocalInd &localInd_, Dune::FieldVector< RT, dim >const &outernormal, Cache const &cache_, Cache const &cacheNeigh_, Evaluators const &evaluators_)
VariableSetDescription< RecoverySpaces, Description > RecoveryVariableSet
VariationalArg< RT, dim > modarg
void operator()(Row const &) const
WeakBoundaryValuesFull(LocalInd &localInd_, RT &integrationElement, Dune::FieldVector< RT, dim >const &outernormal, Cache const &cache_, BoundaryCache const &cacheBoundary_, Evaluators const &evaluators_)
void operator()(Variable const &) const
GlobalSolution & globalSolution
HalfGradientJump(LocalInd &localInd_, Dune::FieldVector< RT, dim >const &outernormal, Cache const &cache_, Cache const &cacheNeigh_, Evaluators const &evaluators_)
void operator()(Variable const &) const
void operator()(Variable const &) const
Evaluators const & evaluators
LocalSolution const & localSolution
VariationalArg< RT, dim > modargTest
void operator()(Variable const &) const
Evaluators const & evaluators
void operator()(Variable const &) const
static int const spaceIndex
LocalMatrix & localmatrix
void getErrorFunction(RecoveryRepresentation &recovery, Spaces const &spaces, FunctionalSimpl const &vf)
CellData< typenameFunction::Grid >::CellDataVector BWErrorIndicator(Function const &f, Functional const &vf)
Construct an error indicator in the flavour of Bank/Weiser.
VariationalArg< RT, dim > modargB
VariationalArg< RT, dim > modargB
Evaluators const & evaluators
VariationalArg< RT, dim > modargB
VariationalArg< RT, dim > modargTest
FEFunctionSpace< DiscontinuousLagrangeMapper< double, Grid > > RecoverySpace
StrongBoundaryValues(LocalInd &localInd_, RT &integrationElement, Dune::FieldVector< RT, dim >const &outernormal, Cache const &cache_, BoundaryCache const &cacheBoundary_, Evaluators const &evaluators_)
LocalNormalMatrixBlock(LocalMatrix &localmatrix_, RT intEl_, Evaluators const &evaluators_, Cache const &cache_)
void operator()(Col const &) const
LocalSolution const & localSolution
Evaluators const & evaluators
Evaluators const & evaluators
void operator()(Variable const &) const
void rank1KernelVector(LocalVector &localvector, RT intEl, Evaluators const &evaluators)
static int const systFull
ScatterFullLocalSolution(LocalSolution const &localSolution_, Evaluators const &evaluators_, GlobalSolution &globalSolution_)
Evaluators const & evaluators
void operator()(Variable const &) const
Evaluators const & evaluators
WeakResiduum(LocalRHS &localRHS_, RT intEl_, Cache const &cache_, Evaluators const &evaluators_)
BoundaryCache const & boundaryCache
void operator()(Variable const &) const
VariationalArg< RT, dim > modarg
VariationalArg< RT, dim > modarg
VariationalArg< RT, dim > modarg
ScatterLocalSolution(LocalSolution const &localSolution_, Evaluators const &evaluators_, GlobalSolution &globalSolution_)
void operator()(Variable const &) const
FEFunctionSpace< ContinuousLagrangeMapper< double, Grid > > ContRecoverySpace
void operator()(Variable const &) const
WeakResiduumMainPart(LocalRHS &localRHS_, RT intEl_, Cache const &cache_, Evaluators const &evaluators_)
Evaluators const & evaluators
VariableSetDescription< ContRecoverySpaces, Description > ContRecoveryVariableSet
BoundaryCache const & boundaryCache
BoundaryCache const & boundaryCache
WeakBoundaryValues(LocalInd &localInd_, RT &integrationElement, Dune::FieldVector< RT, dim >const &outernormal, Cache const &cache_, BoundaryCache const &cacheBoundary_, Evaluators const &evaluators_)
Evaluators const & evaluators
WeakResiduumFull(LocalRHS &localRHS_, RT intEl_, Cache const &cache_, Evaluators const &evaluators_)
void operator()(Variable const &) const
Evaluators const & evaluators
void solveLocalFullSystem(LocalVector &c, LocalMatrix &A, LocalVector &b)
ContRecoveryVariableSet::VariableSet ContRecoveryRepresentation
void edgeAveraging(Result &result, F const &f, Spaces const &spaces, ExtendedSpaces const &extendedSpaces)
Computes an error representation function, which is useful for goal oriented adaptivity.
LocalMatrix & localmatrix
Evaluators const & evaluators
void localNormalMatrix(LocalMatrix &localmatrix, RT intEl, Evaluators const &evaluators, Cache const &cache)
void getFullErrorFunction(RecoveryRepresentation &recovery, Spaces const &spaces, Functional const &vf, FunctionalSimpl const &vfs)
void operator()(Variable const &) const
VariationalArg< RT, dim > modarg
GlobalSolution & globalSolution
SolveLocalSystem(LocalVector &c_, LocalMatrix &A_, LocalVector &b_)
boost::fusion::vector< ContRecoverySpace const * > ContRecoverySpaces
void moveEvaluatorsToIntegrationPoint(Evaluators &evals, Dune::FieldVector< CoordType, dim > const &x, Dune::QuadratureRule< CoordType, subDim > const &qr, int ip, int subId)
Moves all provided evaluators to the given integration point, evaluating the shape functions there.
int maxOrder(Evaluators const &evals)
Computes the maximum ansatz order used in a collection of evaluators.
typename boost::fusion::result_of::as_vector< typename boost::fusion::result_of::transform< Spaces, GetEvaluatorTypes >::type >::type Evaluators
the heterogeneous sequence type of Evaluators for the given spaces
Dune::FieldVector< T, n > max(Dune::FieldVector< T, n > x, Dune::FieldVector< T, n > const &y)
Componentwise maximum.
void moveEvaluatorsToCell(Evaluators &evals, Cell const &cell)
Moves all provided evaluators to the given cell.
Extracts the type of FE space with given index from set of spaces.
A class defining elementary information about a single variable.
ValueType value
The shape function's value, a vector of dimension components