DUNE-FEM (unstable)

function.hh
1 #ifndef DUNE_FEM_FUNCTION_HH
2 #define DUNE_FEM_FUNCTION_HH
3 
4 // dune-common includes
5 #include <dune/common/fvector.hh>
6 
7 // dune-fem includes
8 #include <dune/fem/misc/bartonnackmaninterface.hh>
9 #include <dune/fem/operator/common/mapping.hh>
10 #include <dune/fem/version.hh>
11 
12 
13 namespace Dune
14 {
15 
16  namespace Fem
17  {
18 
42  template< class FunctionSpaceImp, class FunctionImp >
43  class Function
44  : public BartonNackmanInterface< Function< FunctionSpaceImp, FunctionImp >,
45  FunctionImp >,
46  public Mapping < typename FunctionSpaceImp :: DomainFieldType,
47  typename FunctionSpaceImp :: RangeFieldType,
48  typename FunctionSpaceImp :: DomainType,
49  typename FunctionSpaceImp :: RangeType >
50  {
52  typedef BartonNackmanInterface< ThisType, FunctionImp > BaseType;
53 
54  public:
56  typedef FunctionSpaceImp FunctionSpaceType;
57 
59  typedef FunctionImp FunctionType;
60 
73 
77 
78  protected:
79  using BaseType::asImp;
80 
82  Function () = default;
83 
84  Function ( const ThisType& ) = default;
85 
86  public:
87  ThisType& operator= ( const ThisType& ) = delete;
88 
90  virtual ~Function ()
91  {}
92 
97  virtual void operator()(const DomainType & arg, RangeType & dest) const
98  {
99  evaluate(arg,dest);
100  }
101 
107  void evaluate ( const DomainType &x, RangeType &value ) const
108  {
109  CHECK_AND_CALL_INTERFACE_IMPLEMENTATION( asImp().evaluate( x, value ) );
110  }
111 
117  void jacobian ( const DomainType &x, JacobianRangeType &jacobian ) const
118  {
120  }
121 
127  void hessian ( const DomainType &x, HessianRangeType &hessian ) const
128  {
130  }
131 
132  private:
137  virtual void apply (const DomainType& arg, RangeType& dest) const
138  {
139  operator()(arg, dest);
140  }
141  };
142 
144 
145  } // namespace Fem
146 
147 } // namespace Dune
148 
149 #endif // #ifndef DUNE_FEM_FUNCTION_HH
#define CHECK_AND_CALL_INTERFACE_IMPLEMENTATION(__interface_method_to_call__)
Definition: bartonnackmanifcheck.hh:61
ExplicitFieldVector< FieldMatrix< RangeFieldType, dimDomain, dimDomain >, dimRange > HessianRangeType
Intrinsic type used for the hessian values has a Dune::FieldMatrix type interface.
Definition: functionspaceinterface.hh:79
FunctionSpaceTraits::DomainFieldType DomainFieldType
Intrinsic type used for values in the domain field (usually a double)
Definition: functionspaceinterface.hh:60
FunctionSpaceTraits::RangeType RangeType
Type of range vector (using type of range field) has a Dune::FieldVector type interface.
Definition: functionspaceinterface.hh:71
FunctionSpaceTraits::LinearMappingType JacobianRangeType
Intrinsic type used for the jacobian values has a Dune::FieldMatrix type interface.
Definition: functionspaceinterface.hh:75
FunctionSpaceTraits::DomainType DomainType
Type of domain vector (using type of domain field) has a Dune::FieldVector type interface.
Definition: functionspaceinterface.hh:67
FunctionSpaceTraits::RangeFieldType RangeFieldType
Intrinsic type used for values in the range field (usually a double)
Definition: functionspaceinterface.hh:63
Abstract class representing a function.
Definition: function.hh:50
FunctionSpaceType ::DomainFieldType DomainFieldType
field type of domain
Definition: function.hh:62
FunctionSpaceImp FunctionSpaceType
type of function space this function belongs to
Definition: function.hh:56
FunctionSpaceType ::RangeType RangeType
range type
Definition: function.hh:68
Mapping< DomainFieldType, RangeFieldType, DomainType, RangeType > MappingType
type of mapping base class
Definition: function.hh:76
virtual ~Function()
destructor
Definition: function.hh:90
FunctionSpaceType ::RangeFieldType RangeFieldType
field type of range
Definition: function.hh:64
virtual void operator()(const DomainType &arg, RangeType &dest) const
application operator call evaluate
Definition: function.hh:97
void evaluate(const DomainType &x, RangeType &value) const
evaluate the function
Definition: function.hh:107
FunctionImp FunctionType
type of the implementation (Barton-Nackman)
Definition: function.hh:59
void jacobian(const DomainType &x, JacobianRangeType &jacobian) const
evaluate the Jacobian of the function
Definition: function.hh:117
FunctionSpaceType ::HessianRangeType HessianRangeType
hessian type
Definition: function.hh:72
FunctionSpaceType ::JacobianRangeType JacobianRangeType
jacobian type
Definition: function.hh:70
void hessian(const DomainType &x, HessianRangeType &hessian) const
evaluate the hessian of the function
Definition: function.hh:127
Function()=default
default constructor
FunctionSpaceType ::DomainType DomainType
domain type
Definition: function.hh:66
A mapping from one vector space into another This class describes a general mapping from the domain v...
Definition: mapping.hh:47
Implements a vector constructed from a given type representing a field and a compile-time given size.
Dune namespace.
Definition: alignedallocator.hh:13
Creative Commons License   |  Legal Statements / Impressum  |  Hosted by TU Dresden  |  generated with Hugo v0.80.0 (May 9, 22:29, 2024)