4 #ifndef DUNE_PDELAB_COMMON_FUNCTIONUTILITIES_HH
5 #define DUNE_PDELAB_COMMON_FUNCTIONUTILITIES_HH
10 #include <dune/common/debugstream.hh>
11 #include <dune/common/shared_ptr.hh>
13 #include <dune/geometry/quadraturerules.hh>
14 #include <dune/geometry/type.hh>
16 #include <dune/grid/common/gridenums.hh>
17 #include <dune/grid/utility/hierarchicsearch.hh>
51 typename GF::Traits::RangeType& sum,
52 unsigned qorder = 1) {
53 typedef typename GF::Traits::GridViewType GV;
54 typedef typename GV::template Codim<0>::
55 template Partition<Interior_Partition>::Iterator EIterator;
56 typedef typename GV::template Codim<0>::Geometry Geometry;
57 typedef typename GF::Traits::RangeType Range;
58 typedef typename GF::Traits::DomainFieldType DF;
59 static const int dimD = GF::Traits::dimDomain;
60 typedef Dune::QuadratureRule<DF,dimD> QR;
61 typedef Dune::QuadratureRules<DF,dimD> QRs;
62 typedef typename QR::const_iterator QIterator;
66 const EIterator eend = gf.getGridView().template end<0,
67 Interior_Partition>();
68 for(EIterator eit = gf.getGridView().template begin<0,
69 Interior_Partition>(); eit != eend; ++eit) {
70 const Geometry& geo = eit->geometry();
71 Dune::GeometryType gt = geo.type();
72 const QR& rule = QRs::rule(gt,qorder);
73 const QIterator qend = rule.end();
75 for (QIterator qit=rule.begin(); qit != qend; ++qit)
78 gf.evaluate(*eit,qit->position(),val);
81 val *= qit->weight() * geo.integrationElement(qit->position());
99 typedef typename GF::Traits::GridViewType GV;
100 typedef typename GV::template Codim<0>::EntityPointer EPtr;
101 typedef typename GF::Traits::DomainType Domain;
102 typedef typename GF::Traits::RangeType Range;
115 template<
class GFHandle>
120 evalRank = gfp->getGridView().comm().size();
121 int myRank = gfp->getGridView().comm().rank();
124 (HierarchicSearch<typename GV::Grid, typename GV::IndexSet>
125 (gfp->getGridView().grid(), gfp->getGridView().indexSet()).
126 template findEntity<Interior_Partition>(xg)));
128 if((*e)->partitionType() == InteriorEntity)
131 catch(
const Dune::GridError&) { }
132 evalRank = gfp->getGridView().comm().min(evalRank);
133 if(myRank == evalRank)
134 xl = (*e)->geometry().local(xg);
137 if(myRank == 0 && evalRank == gfp->getGridView().comm().size())
138 dwarn <<
"Warning: GridFunctionProbe at (" << xg <<
") is outside "
139 <<
"the grid" << std::endl;
187 typedef typename GF::Traits::RangeFieldType RF;
188 if(evalRank == gfp->getGridView().comm().size())
189 val = std::numeric_limits<RF>::quiet_NaN();
191 if(gfp->getGridView().comm().rank() == evalRank)
192 gfp->evaluate(**e, xl, val);
193 gfp->getGridView().comm().broadcast(&val,1,evalRank);
210 void eval(Range& val,
int rank = 0)
const {
215 Dune::shared_ptr<const GF> gfsp;
217 Dune::shared_ptr<EPtr> e;
227 #endif // DUNE_PDELAB_COMMON_FUNCTIONUTILITIES_HH
void eval(Range &val, int rank=0) const
evaluate the GridFunction and communicate result to the given rank
Definition: functionutilities.hh:210
void eval_all(Range &val) const
evaluate the GridFunction and broadcast result to all ranks
Definition: functionutilities.hh:186
GridFunctionProbe(const GFHandle &gf, const Domain &xg)
Constructor.
Definition: functionutilities.hh:116
void integrateGridFunction(const GF &gf, typename GF::Traits::RangeType &sum, unsigned qorder=1)
Integrate a GridFunction.
Definition: functionutilities.hh:50
XG & xg
Definition: interpolate.hh:67
void setGridFunction(const Dune::shared_ptr< const GF > &gf)
Set a new GridFunction.
Definition: functionutilities.hh:174
void setGridFunction(const GF *gf)
Set a new GridFunction.
Definition: functionutilities.hh:160
void setGridFunction(const GF &gf)
Set a new GridFunction.
Definition: functionutilities.hh:148
Evaluate a GridFunction at a certain global coordinate.
Definition: functionutilities.hh:98