1#ifndef DUNE_FEM_AUTOMATICDIFFERENCEOPERATOR_HH
2#define DUNE_FEM_AUTOMATICDIFFERENCEOPERATOR_HH
18 template<
class DomainFunction,
class RangeFunction,
class LinearOperator >
19 class AutomaticDifferenceOperator;
26 template<
class DomainFunction,
class RangeFunction = DomainFunction >
42 typedef typename Dune::FieldTraits< RangeFieldType >::real_type
RealType;
44 typedef typename RangeFunctionType::DiscreteFunctionSpaceType
RangeSpaceType;
51 b_(
"AutomaticDifferenceOperator::b_", dSpace ),
52 op_u_(
"AutomaticDifferenceOperator::op_u_", rSpace ),
82 template<
class DomainFunction,
class RangeFunction = DomainFunction,
94 typedef typename Dune::FieldTraits< RangeFieldType >::real_type
RealType;
98 typedef typename RangeFunctionType::DiscreteFunctionSpaceType
RangeSpaceType;
111 jOp.set( u, *
this, eps_ );
123 template<
class DomainFunction,
class RangeFunction >
124 inline void AutomaticDifferenceLinearOperator< DomainFunction, RangeFunction >
138 const RealType machine_eps = std::numeric_limits< RealType >::epsilon();
139 const RealType norm_p_sq = arg.normSquaredDofs( );
140 if( norm_p_sq > machine_eps )
154 template<
class DomainFunction,
class RangeFunction >
160 (*op_)( *u_, op_u_ );
164 norm_u_ =
std::sqrt( u_->scalarProductDofs( *u_ ) );
double sqrt(const Dune::Fem::Double &v)
Definition: double.hh:977
Definition: bindguard.hh:11
static ParameterContainer & container()
Definition: io/parameter.hh:193
operator providing a Jacobian through automatic differentiation
Definition: automaticdifferenceoperator.hh:86
BaseType::JacobianOperatorType JacobianOperatorType
Definition: automaticdifferenceoperator.hh:96
Dune::FieldTraits< RangeFieldType >::real_type RealType
Definition: automaticdifferenceoperator.hh:94
BaseType::DomainFieldType DomainFieldType
Definition: automaticdifferenceoperator.hh:93
BaseType::RangeFunctionType RangeFunctionType
Definition: automaticdifferenceoperator.hh:90
AutomaticDifferenceOperator(const RangeFieldType &eps)
Definition: automaticdifferenceoperator.hh:105
RangeFunctionType::DiscreteFunctionSpaceType RangeSpaceType
Definition: automaticdifferenceoperator.hh:98
DomainFunctionType::DiscreteFunctionSpaceType DomainSpaceType
Definition: automaticdifferenceoperator.hh:99
virtual void jacobian(const DomainFunctionType &u, JacobianOperatorType &jOp) const
Definition: automaticdifferenceoperator.hh:109
BaseType::DomainFunctionType DomainFunctionType
Definition: automaticdifferenceoperator.hh:91
AutomaticDifferenceOperator(const ParameterReader ¶meter=Parameter::container())
Definition: automaticdifferenceoperator.hh:101
BaseType::RangeFieldType RangeFieldType
Definition: automaticdifferenceoperator.hh:92
Definition: automaticdifferenceoperator.hh:29
RangeFieldType norm_u_
Definition: automaticdifferenceoperator.hh:68
DomainFunctionType::DiscreteFunctionSpaceType DomainSpaceType
Definition: automaticdifferenceoperator.hh:45
Dune::Fem::Operator< DomainFunction, RangeFunction > OperatorType
Definition: automaticdifferenceoperator.hh:36
BaseType::RangeFunctionType RangeFunctionType
Definition: automaticdifferenceoperator.hh:38
RangeFieldType eps_
Definition: automaticdifferenceoperator.hh:67
const OperatorType * op_
Definition: automaticdifferenceoperator.hh:61
void set(const DomainFunctionType &u, const OperatorType &op, const RealType &eps)
Definition: automaticdifferenceoperator.hh:156
const DomainFunctionType * u_
Definition: automaticdifferenceoperator.hh:62
virtual void operator()(const DomainFunctionType &arg, RangeFunctionType &dest) const
Definition: automaticdifferenceoperator.hh:125
BaseType::DomainFieldType DomainFieldType
Definition: automaticdifferenceoperator.hh:41
Dune::FieldTraits< RangeFieldType >::real_type RealType
Definition: automaticdifferenceoperator.hh:42
AutomaticDifferenceLinearOperator(const std::string &name, const DomainSpaceType &dSpace, const RangeSpaceType &rSpace)
Definition: automaticdifferenceoperator.hh:47
DomainFunctionType b_
Definition: automaticdifferenceoperator.hh:64
RangeFunctionType op_u_
Definition: automaticdifferenceoperator.hh:65
const std::string name_
Definition: automaticdifferenceoperator.hh:60
BaseType::DomainFunctionType DomainFunctionType
Definition: automaticdifferenceoperator.hh:39
BaseType::RangeFieldType RangeFieldType
Definition: automaticdifferenceoperator.hh:40
RangeFunctionType::DiscreteFunctionSpaceType RangeSpaceType
Definition: automaticdifferenceoperator.hh:44
abstract differentiable operator
Definition: differentiableoperator.hh:29
BaseType::RangeFunctionType RangeFunctionType
type of discrete function in the operator's range
Definition: differentiableoperator.hh:40
BaseType::DomainFunctionType DomainFunctionType
type of discrete function in the operator's domain
Definition: differentiableoperator.hh:38
DomainFunctionType::RangeFieldType DomainFieldType
field type of the operator's domain
Definition: differentiableoperator.hh:43
RangeFunctionType::RangeFieldType RangeFieldType
field type of the operator's range
Definition: differentiableoperator.hh:45
abstract operator
Definition: operator.hh:34
DomainFunction DomainFunctionType
type of discrete function in the operator's domain
Definition: operator.hh:36
RangeFunction::RangeFieldType RangeFieldType
field type of the operator's range
Definition: operator.hh:43
DomainFunction::RangeFieldType DomainFieldType
field type of the operator's domain
Definition: operator.hh:41
RangeFunction RangeFunctionType
type of discrete function in the operator's range
Definition: operator.hh:38
abstract affine-linear operator
Definition: operator.hh:87