2 #ifndef DUNE_FEM_AUTOMATICDIFFERENCEOPERATOR_HH 3 #define DUNE_FEM_AUTOMATICDIFFERENCEOPERATOR_HH 7 #include <dune/common/nullptr.hh> 21 template<
class DomainFunction,
class RangeFunction,
class LinearOperator >
29 template<
class DomainFunction,
class RangeFunction = DomainFunction >
45 typedef typename Dune::FieldTraits< RangeFieldType >::real_type
RealType;
47 typedef typename RangeFunctionType::DiscreteFunctionSpaceType
RangeSpaceType;
54 b_(
"AutomaticDifferenceOperator::b_", dSpace ),
55 op_u_(
"AutomaticDifferenceOperator::op_u_", rSpace ),
59 virtual void operator() (
const DomainFunctionType &arg, RangeFunctionType &dest )
const;
62 void set (
const DomainFunctionType &u,
const OperatorType &op,
const RealType &eps );
64 const OperatorType *
op_;
65 const DomainFunctionType *
u_;
67 mutable DomainFunctionType
b_;
85 template<
class DomainFunction,
class RangeFunction = DomainFunction,
97 typedef typename Dune::FieldTraits< RangeFieldType >::real_type
RealType;
105 :
eps_( parameter.getValue< RangeFieldType >(
"fem.differenceoperator.eps", RangeFieldType( 0 ) ) )
112 virtual void jacobian (
const DomainFunctionType &u, JacobianOperatorType &jOp )
const 126 template<
class DomainFunction,
class RangeFunction >
128 ::operator() (
const DomainFunctionType &arg, RangeFunctionType &dest )
const 141 const RealType machine_eps = std::numeric_limits< RealType >::epsilon();
142 const RealType norm_p_sq = arg.normSquaredDofs( );
143 if( norm_p_sq > machine_eps )
157 template<
class DomainFunction,
class RangeFunction >
174 #endif // #ifndef DUNE_FEM_AUTOMATICDIFFERENCEOPERATOR_HH RangeFunction RangeFunctionType
type of discrete function in the operator's range
Definition: operator.hh:30
DomainFunctionType::RangeFieldType DomainFieldType
field type of the operator's domain
Definition: differentiableoperator.hh:43
DomainFunctionType::DiscreteFunctionSpaceType DomainSpaceType
Definition: automaticdifferenceoperator.hh:48
BaseType::DomainFunctionType DomainFunctionType
type of discrete function in the operator's domain
Definition: differentiableoperator.hh:38
static double sqrt(const Double &v)
Definition: double.hh:870
operator providing a Jacobian through automatic differentiation
Definition: automaticdifferenceoperator.hh:22
BaseType::RangeFieldType RangeFieldType
Definition: automaticdifferenceoperator.hh:43
Dune::Fem::Operator< DomainFunction, RangeFunction > OperatorType
Definition: automaticdifferenceoperator.hh:39
BaseType::DomainFunctionType DomainFunctionType
Definition: automaticdifferenceoperator.hh:42
AutomaticDifferenceOperator(const RangeFieldType &eps)
Definition: automaticdifferenceoperator.hh:108
RangeFieldType eps_
Definition: automaticdifferenceoperator.hh:70
RangeFunctionType::DiscreteFunctionSpaceType RangeSpaceType
Definition: automaticdifferenceoperator.hh:47
BaseType::DomainFieldType DomainFieldType
Definition: automaticdifferenceoperator.hh:44
Definition: automaticdifferenceoperator.hh:30
BaseType::JacobianOperatorType JacobianOperatorType
Definition: automaticdifferenceoperator.hh:99
Dune::FieldTraits< RangeFieldType >::real_type RealType
Definition: automaticdifferenceoperator.hh:97
const OperatorType * op_
Definition: automaticdifferenceoperator.hh:64
DomainFunctionType b_
Definition: automaticdifferenceoperator.hh:67
abstract operator
Definition: operator.hh:25
Dune::FieldTraits< RangeFieldType >::real_type RealType
Definition: automaticdifferenceoperator.hh:45
BaseType::RangeFunctionType RangeFunctionType
Definition: automaticdifferenceoperator.hh:93
AutomaticDifferenceOperator(const ParameterReader ¶meter=Parameter::container())
Definition: automaticdifferenceoperator.hh:104
Definition: coordinate.hh:4
RangeFunctionType::DiscreteFunctionSpaceType RangeSpaceType
Definition: automaticdifferenceoperator.hh:101
BaseType::DomainFieldType DomainFieldType
Definition: automaticdifferenceoperator.hh:96
const std::string name_
Definition: automaticdifferenceoperator.hh:63
BaseType::DomainFunctionType DomainFunctionType
Definition: automaticdifferenceoperator.hh:94
virtual void jacobian(const DomainFunctionType &u, JacobianOperatorType &jOp) const
Definition: automaticdifferenceoperator.hh:112
void set(const DomainFunctionType &u, const OperatorType &op, const RealType &eps)
Definition: automaticdifferenceoperator.hh:159
const DomainFunctionType * u_
Definition: automaticdifferenceoperator.hh:65
static ParameterContainer & container()
Definition: io/parameter.hh:190
DomainFunction::RangeFieldType DomainFieldType
field type of the operator's domain
Definition: operator.hh:33
RangeFunction::RangeFieldType RangeFieldType
field type of the operator's range
Definition: operator.hh:35
BaseType::RangeFunctionType RangeFunctionType
type of discrete function in the operator's range
Definition: differentiableoperator.hh:40
abstract affine-linear operator
Definition: operator.hh:70
RangeFieldType norm_u_
Definition: automaticdifferenceoperator.hh:71
AutomaticDifferenceLinearOperator(const std::string &name, const DomainSpaceType &dSpace, const RangeSpaceType &rSpace)
Definition: automaticdifferenceoperator.hh:50
virtual void operator()(const DomainFunctionType &arg, RangeFunctionType &dest) const
application operator
Definition: automaticdifferenceoperator.hh:128
abstract differentiable operator
Definition: differentiableoperator.hh:26
RangeFunctionType op_u_
Definition: automaticdifferenceoperator.hh:68
RangeFunctionType::RangeFieldType RangeFieldType
field type of the operator's range
Definition: differentiableoperator.hh:45
BaseType::RangeFunctionType RangeFunctionType
Definition: automaticdifferenceoperator.hh:41
BaseType::RangeFieldType RangeFieldType
Definition: automaticdifferenceoperator.hh:95
DomainFunctionType::DiscreteFunctionSpaceType DomainSpaceType
Definition: automaticdifferenceoperator.hh:102
DomainFunction DomainFunctionType
type of discrete function in the operator's domain
Definition: operator.hh:28