RVL::BlockOperator< Scalar > Class Template Reference

Operator defined with product domain and range. More...

#include <blockop.hh>

Inheritance diagram for RVL::BlockOperator< Scalar >:

RVL::Operator< Scalar > RVL::Writeable RVL::TensorOp< Scalar > List of all members.

Public Member Functions

 BlockOperator ()
 BlockOperator (const BlockOperator< Scalar > &)
virtual ~BlockOperator ()
virtual const ProductSpace<
Scalar > & 
getProductRange () const =0
 access to range as ProductSpace
const Space< Scalar > & getRange () const
 access to range as Space - delegates to getProductRange

Protected Member Functions

virtual void applyComponent (int i, const Vector< Scalar > &x, Vector< Scalar > &yi) const =0
virtual void apply (Vector< Scalar > const &x, Vector< Scalar > &y) const
virtual void applyComponentDeriv (int i, const Vector< Scalar > &x, const Vector< Scalar > &dx, Vector< Scalar > &dyi) const =0
 $dy = \partial_jF_i(x)dx_j$, where $dx_j \in X_j$, $dy_i \in Y_i$
virtual void applyDeriv (const Vector< Scalar > &x, const Vector< Scalar > &dx, Vector< Scalar > &dy) const
 applyDeriv() is implemented in terms of applyComponentDeriv().
virtual void applyComponentAdjDeriv (int i, const Vector< Scalar > &x, const Vector< Scalar > &dyi, Vector< Scalar > &dx) const =0
 $dx_j = \partial_jF_i(x)^*dy_i$, where $dx_j \in X_j$
virtual void applyAdjDeriv (const Vector< Scalar > &x, const Vector< Scalar > &dy, Vector< Scalar > &dx) const
 applyAdjDeriv() is implemented in terms of applyComponentAdjDeriv().
virtual void applyComponentDeriv2 (int i, const Vector< Scalar > &x, const Vector< Scalar > &dx0, const Vector< Scalar > &dx1, Vector< Scalar > &dyi) const =0
 $dy_i = D^2F_i(x)[dx0, dx1]$, where $dx0, dx1 \in X$, $dy_i \in Y_i$
virtual void applyDeriv2 (const Vector< Scalar > &x, const Vector< Scalar > &dx0, const Vector< Scalar > &dx1, Vector< Scalar > &dy) const
 applyDeriv2() is implemented in terms of applyComponentDeriv().
virtual void applyComponentAdjDeriv2 (int i, const Vector< Scalar > &x, const Vector< Scalar > &dx0, const Vector< Scalar > &dyi, Vector< Scalar > &dx1) const =0
 $dx = \sum_i D^2F_i(x)^*[dx,dy_i]$, where $dy_i \in Y_i$
virtual void applyAdjDeriv2 (const Vector< Scalar > &x, const Vector< Scalar > &dx0, const Vector< Scalar > &dy, Vector< Scalar > &dx1) const
 applyAdjDeriv() is implemented in terms of applyComponentAdjDeriv().
virtual BlockOperator< Scalar > * cloneBlockOp () const =0
 Primary clone method returns object of this type; parent clone method delegates.
Operator< Scalar > * clone () const

Friends

class OperatorEvaluation< Scalar >

Detailed Description

template<class Scalar>
class RVL::BlockOperator< Scalar >

Operator defined with product domain and range.

Partial derivatives are defined componentwise, as is access to the domain and range as ProductSpaces. As for the parent class, all functions which may change the internal state are protected, accessed only by the corresponding OperatorEvaluation objects, which act on independent captive instances.

Definition at line 48 of file blockop.hh.


Constructor & Destructor Documentation

template<class Scalar>
RVL::BlockOperator< Scalar >::BlockOperator (  ) 

Definition at line 186 of file blockop.hh.

template<class Scalar>
RVL::BlockOperator< Scalar >::BlockOperator ( const BlockOperator< Scalar > &   ) 

Definition at line 187 of file blockop.hh.

template<class Scalar>
virtual RVL::BlockOperator< Scalar >::~BlockOperator (  )  [virtual]

Definition at line 188 of file blockop.hh.


Member Function Documentation

template<class Scalar>
virtual void RVL::BlockOperator< Scalar >::applyComponent ( int  i,
const Vector< Scalar > &  x,
Vector< Scalar > &  yi 
) const [protected, pure virtual]

Implemented in RVL::TensorOp< Scalar >.

Referenced by RVL::BlockOperator< Scalar >::apply().

template<class Scalar>
virtual void RVL::BlockOperator< Scalar >::apply ( Vector< Scalar > const &  x,
Vector< Scalar > &  y 
) const [protected, virtual]

Implements RVL::Operator< Scalar >.

Definition at line 58 of file blockop.hh.

References RVL::BlockOperator< Scalar >::applyComponent().

template<class Scalar>
virtual void RVL::BlockOperator< Scalar >::applyComponentDeriv ( int  i,
const Vector< Scalar > &  x,
const Vector< Scalar > &  dx,
Vector< Scalar > &  dyi 
) const [protected, pure virtual]

$dy = \partial_jF_i(x)dx_j$, where $dx_j \in X_j$, $dy_i \in Y_i$

Implemented in RVL::TensorOp< Scalar >.

Referenced by RVL::BlockOperator< Scalar >::applyDeriv().

template<class Scalar>
virtual void RVL::BlockOperator< Scalar >::applyDeriv ( const Vector< Scalar > &  x,
const Vector< Scalar > &  dx,
Vector< Scalar > &  dy 
) const [protected, virtual]

applyDeriv() is implemented in terms of applyComponentDeriv().

Default implementation supplied, which may be overridden.

Implements RVL::Operator< Scalar >.

Definition at line 81 of file blockop.hh.

References RVL::BlockOperator< Scalar >::applyComponentDeriv(), and RVL::Components< Scalar >::getSize().

template<class Scalar>
virtual void RVL::BlockOperator< Scalar >::applyComponentAdjDeriv ( int  i,
const Vector< Scalar > &  x,
const Vector< Scalar > &  dyi,
Vector< Scalar > &  dx 
) const [protected, pure virtual]

$dx_j = \partial_jF_i(x)^*dy_i$, where $dx_j \in X_j$

Implemented in RVL::TensorOp< Scalar >.

Referenced by RVL::BlockOperator< Scalar >::applyAdjDeriv().

template<class Scalar>
virtual void RVL::BlockOperator< Scalar >::applyAdjDeriv ( const Vector< Scalar > &  x,
const Vector< Scalar > &  dy,
Vector< Scalar > &  dx 
) const [protected, virtual]

applyAdjDeriv() is implemented in terms of applyComponentAdjDeriv().

Default implementation supplied, which may be overridden.

Implements RVL::Operator< Scalar >.

Definition at line 104 of file blockop.hh.

References RVL::BlockOperator< Scalar >::applyComponentAdjDeriv(), RVL::Components< Scalar >::getSize(), and RVL::Vector< Scalar >::linComb().

template<class Scalar>
virtual void RVL::BlockOperator< Scalar >::applyComponentDeriv2 ( int  i,
const Vector< Scalar > &  x,
const Vector< Scalar > &  dx0,
const Vector< Scalar > &  dx1,
Vector< Scalar > &  dyi 
) const [protected, pure virtual]

$dy_i = D^2F_i(x)[dx0, dx1]$, where $dx0, dx1 \in X$, $dy_i \in Y_i$

Implemented in RVL::TensorOp< Scalar >.

Referenced by RVL::BlockOperator< Scalar >::applyDeriv2().

template<class Scalar>
virtual void RVL::BlockOperator< Scalar >::applyDeriv2 ( const Vector< Scalar > &  x,
const Vector< Scalar > &  dx0,
const Vector< Scalar > &  dx1,
Vector< Scalar > &  dy 
) const [protected, virtual]

applyDeriv2() is implemented in terms of applyComponentDeriv().

Default implementation supplied, which may be overridden.

Reimplemented from RVL::Operator< Scalar >.

Definition at line 135 of file blockop.hh.

References RVL::BlockOperator< Scalar >::applyComponentDeriv2(), and RVL::Components< Scalar >::getSize().

template<class Scalar>
virtual void RVL::BlockOperator< Scalar >::applyComponentAdjDeriv2 ( int  i,
const Vector< Scalar > &  x,
const Vector< Scalar > &  dx0,
const Vector< Scalar > &  dyi,
Vector< Scalar > &  dx1 
) const [protected, pure virtual]

$dx = \sum_i D^2F_i(x)^*[dx,dy_i]$, where $dy_i \in Y_i$

Implemented in RVL::TensorOp< Scalar >.

Referenced by RVL::BlockOperator< Scalar >::applyAdjDeriv2().

template<class Scalar>
virtual void RVL::BlockOperator< Scalar >::applyAdjDeriv2 ( const Vector< Scalar > &  x,
const Vector< Scalar > &  dx0,
const Vector< Scalar > &  dy,
Vector< Scalar > &  dx1 
) const [protected, virtual]

applyAdjDeriv() is implemented in terms of applyComponentAdjDeriv().

Default implementation supplied, which may be overridden.

Reimplemented from RVL::Operator< Scalar >.

Definition at line 159 of file blockop.hh.

References RVL::BlockOperator< Scalar >::applyComponentAdjDeriv2(), RVL::Components< Scalar >::getSize(), and RVL::Vector< Scalar >::linComb().

template<class Scalar>
virtual BlockOperator<Scalar>* RVL::BlockOperator< Scalar >::cloneBlockOp (  )  const [protected, pure virtual]

Primary clone method returns object of this type; parent clone method delegates.

Implemented in RVL::TensorOp< Scalar >.

Referenced by RVL::BlockOperator< Scalar >::clone().

template<class Scalar>
Operator<Scalar>* RVL::BlockOperator< Scalar >::clone (  )  const [protected, virtual]

Implements RVL::Operator< Scalar >.

Definition at line 182 of file blockop.hh.

References RVL::BlockOperator< Scalar >::cloneBlockOp().

template<class Scalar>
virtual const ProductSpace<Scalar>& RVL::BlockOperator< Scalar >::getProductRange (  )  const [pure virtual]

access to range as ProductSpace

Implemented in RVL::TensorOp< Scalar >.

Referenced by RVL::BlockOperator< Scalar >::getRange().

template<class Scalar>
const Space<Scalar>& RVL::BlockOperator< Scalar >::getRange (  )  const [virtual]

access to range as Space - delegates to getProductRange

Implements RVL::Operator< Scalar >.

Definition at line 193 of file blockop.hh.

References RVL::BlockOperator< Scalar >::getProductRange().


Friends And Related Function Documentation

template<class Scalar>
friend class OperatorEvaluation< Scalar > [friend]

Reimplemented from RVL::Operator< Scalar >.

Definition at line 50 of file blockop.hh.


The documentation for this class was generated from the following file:
Generated on 5 Jan 2017 for RVL by  doxygen 1.4.7