1#ifndef DUNE_FEM_LPNORM_HH
2#define DUNE_FEM_LPNORM_HH
37 const double q = p / (p-1);
39 assert(
max < std::numeric_limits<int>::max()/2. );
45 template<
class Gr
idPart,
class OrderCalculator = DefaultOrderCalculator >
58 template<
class Function >
61 template<
class UFunction,
class VFunction >
77 template<
class DiscreteFunctionType,
class PartitionSet >
78 typename Dune::FieldTraits< typename DiscreteFunctionType::RangeFieldType >::real_type
79 norm (
const DiscreteFunctionType &u,
const PartitionSet& partitionSet )
const;
82 template<
class DiscreteFunctionType >
83 typename Dune::FieldTraits< typename DiscreteFunctionType::RangeFieldType >::real_type
84 norm (
const DiscreteFunctionType &u )
const
86 return norm( u, Partitions::interior );
90 template<
class UDiscreteFunctionType,
class VDiscreteFunctionType,
class PartitionSet >
91 typename Dune::FieldTraits< typename UDiscreteFunctionType::RangeFieldType >::real_type
92 distance (
const UDiscreteFunctionType &u,
const VDiscreteFunctionType &v,
const PartitionSet& partitionSet )
const;
95 template<
class UDiscreteFunctionType,
class VDiscreteFunctionType >
96 typename Dune::FieldTraits< typename UDiscreteFunctionType::RangeFieldType >::real_type
97 distance (
const UDiscreteFunctionType &u,
const VDiscreteFunctionType &v )
const
99 return distance( u, v, Partitions::interior );
102 template<
class ULocalFunctionType,
class VLocalFunctionType,
class ReturnType >
103 void distanceLocal (
const EntityType &entity,
unsigned int order,
const ULocalFunctionType &uLocal,
const VLocalFunctionType &vLocal, ReturnType &sum )
const;
105 template<
class LocalFunctionType,
class ReturnType >
108 int order (
const int spaceOrder )
const ;
122 template<
class WeightFunction,
class OrderCalculator = DefaultOrderCalculator >
124 :
public LPNorm< typename WeightFunction::DiscreteFunctionSpaceType::GridPartType,
137 template<
class Function >
155 template<
class LocalFunctionType,
class ReturnType >
156 void normLocal (
const EntityType &entity,
unsigned int order,
const LocalFunctionType &uLocal, ReturnType &sum )
const;
158 template<
class ULocalFunctionType,
class VLocalFunctionType,
class ReturnType >
159 void distanceLocal (
const EntityType &entity,
unsigned int order,
const ULocalFunctionType &uLocal,
const VLocalFunctionType &vLocal, ReturnType &sum )
const;
170 template<
class Gr
idPart,
class OrderCalculator >
174 orderCalc_( new OrderCalculator() ),
175 communicate_(
BaseType::checkCommunicateFlag( communicate ) )
179 template<
class Gr
idPart,
class OrderCalculator>
182 return spaceOrder * orderCalc_->operator() (p_);
186 template<
class Gr
idPart,
class OrderCalculator>
187 template<
class DiscreteFunctionType,
class PartitionSet >
188 inline typename Dune::FieldTraits< typename DiscreteFunctionType::RangeFieldType >::real_type
191 typedef typename DiscreteFunctionType::RangeFieldType RangeFieldType;
192 typedef typename Dune::FieldTraits< RangeFieldType >::real_type RealType;
193 typedef FieldVector< RealType, 1 > ReturnType ;
196 ReturnType sum = BaseType :: forEach( u, ReturnType(0), partitionSet );
201 sum[ 0 ] = comm().sum( sum[ 0 ] );
205 return std::pow ( sum[ 0 ], (1.0 / p_) );
208 template<
class Gr
idPart,
class OrderCalculator >
209 template<
class UDiscreteFunctionType,
class VDiscreteFunctionType,
class PartitionSet >
210 inline typename Dune::FieldTraits< typename UDiscreteFunctionType::RangeFieldType >::real_type
212 ::distance (
const UDiscreteFunctionType &u,
const VDiscreteFunctionType &v,
const PartitionSet& partitionSet )
const
214 typedef typename UDiscreteFunctionType::RangeFieldType RangeFieldType;
215 typedef typename Dune::FieldTraits< RangeFieldType >::real_type RealType;
216 typedef FieldVector< RealType, 1 > ReturnType ;
219 ReturnType sum = BaseType :: forEach( u, v, ReturnType(0), partitionSet );
224 sum[ 0 ] = comm().sum( sum[ 0 ] );
228 return std::pow( sum[ 0 ], (1.0/p_) );
231 template<
class Gr
idPart,
class OrderCalculator >
232 template<
class LocalFunctionType,
class ReturnType >
243 template<
class Gr
idPart,
class OrderCalculator >
244 template<
class ULocalFunctionType,
class VLocalFunctionType,
class ReturnType >
252 LocalDistanceType dist( uLocal, vLocal );
259 template<
class Gr
idPart,
class OrderCalculator >
260 template<
class Function >
266 typedef typename Dune::FieldTraits< RangeFieldType >::real_type
RealType;
270 : function_( function ),
274 template<
class Po
int >
278 function_.evaluate( x, phi );
279 ret = std :: pow ( phi.two_norm(),
p_);
283 const FunctionType &function_;
288 template<
class Gr
idPart,
class OrderCalculator >
289 template<
class UFunction,
class VFunction >
296 typedef typename Dune::FieldTraits< RangeFieldType >::real_type
RealType;
304 template<
class Po
int >
308 u_.evaluate( x, ret );
309 v_.evaluate( x, phi );
313 template<
class Po
int >
317 u_.jacobian( x, ret );
318 v_.jacobian( x, phi );
323 const UFunctionType &u_;
324 const VFunctionType &v_;
331 template<
class WeightFunction,
class OrderCalculator >
334 :
BaseType( weightFunction.space().gridPart(), p, communicate ),
335 wfLocal_( weightFunction ),
338 static_assert( (WeightFunctionSpaceType::dimRange == 1),
339 "Weight function must be scalar." );
343 template<
class WeightFunction,
class OrderCalculator >
344 template<
class LocalFunctionType,
class ReturnType >
351 wfLocal_.bind( entity );
358 template<
class WeightFunction,
class OrderCalculator >
359 template<
class ULocalFunctionType,
class VLocalFunctionType,
class ReturnType >
368 wfLocal_.bind( entity );
369 LocalDistanceType dist( uLocal, vLocal );
377 template<
class WeightFunction,
class OrderCalculator>
378 template<
class Function >
384 typedef typename Dune::FieldTraits< RangeFieldType >::real_type
RealType;
390 : weightFunction_( weightFunction ),
391 function_( function ),
395 template<
class Po
int >
399 weightFunction_.evaluate( x, weight );
402 function_.evaluate( x, phi );
403 ret = weight[ 0 ] *
std::pow ( phi.two_norm(), p_);
408 const FunctionType &function_;
double max(const Dune::Fem::Double &v, const double p)
Definition: double.hh:965
Dune::Fem::Double pow(const Dune::Fem::Double &a, const Dune::Fem::Double &b)
Definition: double.hh:947
Definition: bindguard.hh:11
typename Impl::ConstLocalFunction< GridFunction >::Type ConstLocalFunction
Definition: const.hh:604
static double max(const Double &v, const double p)
Definition: double.hh:398
Abstract class representing a function.
Definition: common/function.hh:50
FunctionSpaceType::RangeType RangeType
range type
Definition: common/function.hh:68
FunctionSpaceType::RangeFieldType RangeFieldType
field type of range
Definition: common/function.hh:64
Definition: domainintegral.hh:33
GridPartType::template Codim< 0 >::EntityType EntityType
Definition: domainintegral.hh:44
const GridPartType::CollectiveCommunicationType & comm() const
Definition: domainintegral.hh:244
const GridPartType & gridPart() const
Definition: domainintegral.hh:242
Quadrature Order Interface.
Definition: lpnorm.hh:24
virtual int operator()(const double p)=0
default Quadrature Order Calculator
Definition: lpnorm.hh:33
int operator()(const double p)
Definition: lpnorm.hh:34
Dune::FieldTraits< typenameDiscreteFunctionType::RangeFieldType >::real_type norm(const DiscreteFunctionType &u) const
|| u ||_Lp on interior partition entities
Definition: lpnorm.hh:84
void normLocal(const EntityType &entity, unsigned int order, const LocalFunctionType &uLocal, ReturnType &sum) const
Definition: lpnorm.hh:234
const bool communicate_
Definition: lpnorm.hh:113
Dune::FieldTraits< typenameDiscreteFunctionType::RangeFieldType >::real_type norm(const DiscreteFunctionType &u, const PartitionSet &partitionSet) const
|| u ||_Lp on given set of entities (partition set)
Definition: lpnorm.hh:189
LPNorm(const GridPartType &gridPart, const double p, const bool communicate=true)
constructor
Definition: lpnorm.hh:171
BaseType::EntityType EntityType
Definition: lpnorm.hh:64
Dune::FieldTraits< typenameUDiscreteFunctionType::RangeFieldType >::real_type distance(const UDiscreteFunctionType &u, const VDiscreteFunctionType &v, const PartitionSet &partitionSet) const
|| u - v ||_Lp on given set of entities (partition set)
Definition: lpnorm.hh:212
GridPart GridPartType
Definition: lpnorm.hh:52
OrderCalculator * orderCalc_
Definition: lpnorm.hh:112
int order(const int spaceOrder) const
Definition: lpnorm.hh:180
const GridPartType::CollectiveCommunicationType & comm() const
Definition: domainintegral.hh:244
Dune::FieldTraits< typenameUDiscreteFunctionType::RangeFieldType >::real_type distance(const UDiscreteFunctionType &u, const VDiscreteFunctionType &v) const
|| u - v ||_Lp on interior partition entities
Definition: lpnorm.hh:97
Integrator< QuadratureType > IntegratorType
Definition: lpnorm.hh:66
double p_
Definition: lpnorm.hh:111
CachingQuadrature< GridPartType, 0 > QuadratureType
Definition: lpnorm.hh:65
void distanceLocal(const EntityType &entity, unsigned int order, const ULocalFunctionType &uLocal, const VLocalFunctionType &vLocal, ReturnType &sum) const
Definition: lpnorm.hh:246
const GridPartType & gridPart() const
Definition: domainintegral.hh:242
Definition: lpnorm.hh:262
FunctionType::RangeFieldType RangeFieldType
Definition: lpnorm.hh:265
void evaluate(const Point &x, RangeType &ret) const
Definition: lpnorm.hh:275
FunctionMultiplicator(const FunctionType &function, double p)
Definition: lpnorm.hh:269
FieldVector< RealType, 1 > RangeType
Definition: lpnorm.hh:267
Function FunctionType
Definition: lpnorm.hh:263
Dune::FieldTraits< RangeFieldType >::real_type RealType
Definition: lpnorm.hh:266
Definition: lpnorm.hh:291
void evaluate(const Point &x, RangeType &ret) const
Definition: lpnorm.hh:305
UFunction UFunctionType
Definition: lpnorm.hh:292
UFunctionType::RangeFieldType RangeFieldType
Definition: lpnorm.hh:295
UFunctionType::RangeType RangeType
Definition: lpnorm.hh:297
VFunction VFunctionType
Definition: lpnorm.hh:293
void jacobian(const Point &x, JacobianRangeType &ret) const
Definition: lpnorm.hh:314
FunctionDistance(const UFunctionType &u, const VFunctionType &v)
Definition: lpnorm.hh:300
UFunctionType::JacobianRangeType JacobianRangeType
Definition: lpnorm.hh:298
Dune::FieldTraits< RangeFieldType >::real_type RealType
Definition: lpnorm.hh:296
Definition: lpnorm.hh:126
BaseType::EntityType EntityType
Definition: lpnorm.hh:143
WeightFunctionType::DiscreteFunctionSpaceType WeightFunctionSpaceType
Definition: lpnorm.hh:133
WeightFunction WeightFunctionType
Definition: lpnorm.hh:131
ConstLocalFunction< WeightFunctionType > LocalWeightFunctionType
Definition: lpnorm.hh:140
void normLocal(const EntityType &entity, unsigned int order, const LocalFunctionType &uLocal, ReturnType &sum) const
Definition: lpnorm.hh:346
void distanceLocal(const EntityType &entity, unsigned int order, const ULocalFunctionType &uLocal, const VLocalFunctionType &vLocal, ReturnType &sum) const
Definition: lpnorm.hh:361
WeightFunctionType::RangeType WeightType
Definition: lpnorm.hh:141
WeightFunctionSpaceType::GridPartType GridPartType
Definition: lpnorm.hh:134
BaseType::IntegratorType IntegratorType
Definition: lpnorm.hh:144
Definition: lpnorm.hh:380
WeightedFunctionMultiplicator(const LocalWeightFunctionType &weightFunction, const FunctionType &function, double p)
Definition: lpnorm.hh:387
FunctionType::RangeFieldType RangeFieldType
Definition: lpnorm.hh:383
Dune::FieldTraits< RangeFieldType >::real_type RealType
Definition: lpnorm.hh:384
void evaluate(const Point &x, RangeType &ret) const
Definition: lpnorm.hh:396
Function FunctionType
Definition: lpnorm.hh:381
FieldVector< RealType, 1 > RangeType
Definition: lpnorm.hh:385
integrator for arbitrary functions providing evaluate
Definition: integrator.hh:28
void integrateAdd(const EntityType &entity, const Function &function, typename Function ::RangeType &ret) const
add the integral over an entity to a variable
Definition: integrator.hh:67