RVL::Vector< Scalar > Class Template Reference

RVL Vector class. More...

#include <space.hh>

Inheritance diagram for RVL::Vector< Scalar >:

RVL::Writeable List of all members.

Public Types

typedef ScalarFieldTraits<
Scalar >::AbsType 
NormRetType
 convenient typedef for positive real type

Public Member Functions

 Vector (const Vector< Scalar > &x)
 Copy constructor.
 Vector (const Space< Scalar > &_sp, bool _initZero=false)
 Standard constructor.
 ~Vector ()
 Destructor.
const Space< Scalar > & getSpace () const
 access to Space
bool inSpace (const Space< Scalar > &sp1) const
 returns nonzero if this vector is a member of this space.
bool inSameSpace (const Vector< Scalar > &x) const
 returns nonzero if this vector is member of same space as argument vector.
unsigned int getVersion () const
 Version numbers are automatically incremented in the eval methods for which this is target.
void incrementVersion ()
void eval (FunctionObject &f, vector< Vector< Scalar > const * > &x)
 generic evaluation of a FunctionObject
void eval (FunctionObject &f)
 eval convenience interface: no additional vector args
void eval (FunctionObject &f, const Vector< Scalar > &x)
 eval convenience interface: one additional vector arg
void eval (FunctionObject &f, const Vector< Scalar > &x, const Vector< Scalar > &y)
 eval convenience interface: two additional vector args
void eval (FunctionObject &f, const Vector< Scalar > &x, const Vector< Scalar > &y, const Vector< Scalar > &z)
 eval convenience interface: three additional vector args
void eval (FunctionObjectConstEval &f, vector< Vector< Scalar > const * > &x) const
 generic evaluation of a FunctionObjectConstEval
void eval (FunctionObjectConstEval &f) const
 eval convenience interface: no additional vector args
void eval (FunctionObjectConstEval &f, const Vector< Scalar > &x) const
 eval convenience interface: one additional vector arg
void eval (FunctionObjectConstEval &f, const Vector< Scalar > &x, const Vector< Scalar > &y) const
 eval convenience interface: two additional vector args
void eval (FunctionObjectConstEval &f, const Vector< Scalar > &x, const Vector< Scalar > &y, const Vector< Scalar > &z) const
 eval convenience interface: three additional vector args
Scalar inner (const Vector< Scalar > &y) const
 Inner product.
void linComb (Scalar a, const Vector< Scalar > &x, Scalar b=ScalarFieldTraits< Scalar >::One())
 Linear Combination.
void zero ()
 Assignment to zero vector.
void copy (const Vector< Scalar > &x)
 Copy.
void scale (Scalar c)
 Scale, unary version.
void scale (Scalar c, const Vector< Scalar > &x)
 Scale, binary version.
void negate ()
 Negation, unary version.
void negate (const Vector< Scalar > &x)
 Negation, binary version.
NormRetType normsq () const
 return Norm Squared.
NormRetType norm () const
 return Norm.
ostream & write (ostream &str) const

Static Public Member Functions

static std::shared_ptr< Vector<
Scalar > > 
newPtr (Space< Scalar > const &sp)
 class method for safe dynamic allocation

Protected Member Functions

DataContainergetDataContainer () const
 access to DataContainer
 Vector (const Space< Scalar > &_sp, DataContainer *_d, unsigned int &_verref, bool _own=false)
 Protected vector copy constructor, shallow copy semantics.
Vector< Scalar > * build_from_kit (const Space< Scalar > &_sp, DataContainer *_d, unsigned int &_verref, bool _own=false)
 by hiding the constructor, makes it available to child classes
 Vector (const Vector< Scalar > *v)
 Protected constructor which lets child classes wrap either space or datacontainer data members in other interfaces.
void * operator new (size_t size)
 The Evaluation classes have Vectors as data members.
unsigned int & getVersionRef () const

Friends

class Components< Scalar >

Detailed Description

template<class Scalar>
class RVL::Vector< Scalar >

RVL Vector class.

Concrete class with all aspects of a natural vector interface implemented through delegation to Space and DataContainer data members. Provision for evaluation of arbitrary FunctionObject and FunctionObjectConstEval instances implemented through delegation to DataContainer::eval.

Definition at line 422 of file space.hh.


Member Typedef Documentation

template<class Scalar>
typedef ScalarFieldTraits<Scalar>::AbsType RVL::Vector< Scalar >::NormRetType

convenient typedef for positive real type

Definition at line 538 of file space.hh.


Constructor & Destructor Documentation

template<class Scalar>
RVL::Vector< Scalar >::Vector ( const Space< Scalar > &  _sp,
DataContainer _d,
unsigned int &  _verref,
bool  _own = false 
) [protected]

Protected vector copy constructor, shallow copy semantics.

In default case, this object owns only references to external data.

Definition at line 479 of file space.hh.

References RVL::Vector< Scalar >::getDataContainer(), and RVL::Writeable::write().

template<class Scalar>
RVL::Vector< Scalar >::Vector ( const Vector< Scalar > *  v  )  [protected]

Protected constructor which lets child classes wrap either space or datacontainer data members in other interfaces.

Definition at line 508 of file space.hh.

template<class Scalar>
RVL::Vector< Scalar >::Vector ( const Vector< Scalar > &  x  ) 

Copy constructor.

Implements deep copy, as data is actually owned by this object.

Definition at line 542 of file space.hh.

References RVL::Vector< Scalar >::getDataContainer().

template<class Scalar>
RVL::Vector< Scalar >::Vector ( const Space< Scalar > &  _sp,
bool  _initZero = false 
)

Standard constructor.

Constructs a member of a given vector space. Note that data is not initialized. For large vector sizes, this constructor is therefore to be preferred to the copy constructor when a choice exists and data copying is not needed.

The data container can be initialized to zero by setting the optional second parameter to true.

Definition at line 566 of file space.hh.

template<class Scalar>
RVL::Vector< Scalar >::~Vector (  ) 

Destructor.

Deallocates dynamically allocated DataContainer.

Definition at line 572 of file space.hh.


Member Function Documentation

template<class Scalar>
DataContainer* RVL::Vector< Scalar >::getDataContainer (  )  const [protected]

access to DataContainer

Definition at line 467 of file space.hh.

Referenced by RVL::Components< Scalar >::Components(), RVL::Vector< Scalar >::copy(), RVL::Vector< Scalar >::eval(), RVL::Vector< Scalar >::inner(), RVL::Vector< Scalar >::linComb(), RVL::Vector< Scalar >::negate(), RVL::Vector< Scalar >::scale(), RVL::Vector< Scalar >::Vector(), and RVL::Vector< Scalar >::write().

template<class Scalar>
Vector<Scalar>* RVL::Vector< Scalar >::build_from_kit ( const Space< Scalar > &  _sp,
DataContainer _d,
unsigned int &  _verref,
bool  _own = false 
) [protected]

by hiding the constructor, makes it available to child classes

Definition at line 498 of file space.hh.

template<class Scalar>
void* RVL::Vector< Scalar >::operator new ( size_t  size  )  [protected]

The Evaluation classes have Vectors as data members.

Accordingly, general RVL apps should avoid dynamic allocation of Vectors, just as they should avoid dynamic allocation of Spaces - to eliminate the risk of dangling references, and because it is unnecessary. However the Components and LocalVector classes do need to construct vectors dynamically, using the protected constructors described above. Therefore we make operator new protected.

Version 1.0: user control, for the bold. "There are old sailors, and there are bold sailors, but there are no old, bold sailors".

Definition at line 525 of file space.hh.

template<class Scalar>
unsigned int& RVL::Vector< Scalar >::getVersionRef (  )  const [protected]

Definition at line 531 of file space.hh.

Referenced by RVL::Components< Scalar >::Components().

template<class Scalar>
static std::shared_ptr< Vector<Scalar> > RVL::Vector< Scalar >::newPtr ( Space< Scalar > const &  sp  )  [static]

class method for safe dynamic allocation

Definition at line 575 of file space.hh.

Referenced by RVL::CompLinearOp< Scalar >::apply(), and RVL::CompLinearOp< Scalar >::applyAdj().

template<class Scalar>
const Space<Scalar>& RVL::Vector< Scalar >::getSpace (  )  const

access to Space

Definition at line 581 of file space.hh.

Referenced by RVL::EuclideanForm< Scalar >::apply(), RVL::SymmetricBilinearOp< Scalar >::applyAdjOp(), RVL::LinearOp< Scalar >::applyAdjOp(), RVL::EuclideanForm< Scalar >::applyGradient(), RVL::EuclideanForm< Scalar >::applyHessian(), RVL::LinearOpWithInverse< Scalar >::applyInvAdjOp(), RVL::LinearOpWithInverse< Scalar >::applyInvOp(), RVL::SymmetricBilinearOp< Scalar >::applyOp(), RVL::LinearOp< Scalar >::applyOp(), RVL::Components< Scalar >::Components(), RVL::FunctionalEvaluation< Scalar >::FunctionalEvaluation(), RVL::OperatorEvaluation< Scalar >::OperatorEvaluation(), and RVL::RestrictOp< Scalar >::RestrictOp().

template<class Scalar>
bool RVL::Vector< Scalar >::inSpace ( const Space< Scalar > &  sp1  )  const

returns nonzero if this vector is a member of this space.

Definition at line 584 of file space.hh.

Referenced by RVL::DerivTest(), RVL::GradientTest(), RVL::Vector< Scalar >::inSameSpace(), RVL::Scan(), and RVL::SpaceTest().

template<class Scalar>
bool RVL::Vector< Scalar >::inSameSpace ( const Vector< Scalar > &  x  )  const

returns nonzero if this vector is member of same space as argument vector.

Definition at line 587 of file space.hh.

References RVL::Vector< Scalar >::inSpace(), and RVL::Vector< Scalar >::sp.

template<class Scalar>
unsigned int RVL::Vector< Scalar >::getVersion (  )  const

Version numbers are automatically incremented in the eval methods for which this is target.

Else they are left the same. If a version number seems to be getting to high, make sure that the writesData() method of all FunctionObjects are returning correct information.

Definition at line 595 of file space.hh.

template<class Scalar>
void RVL::Vector< Scalar >::incrementVersion (  ) 

Definition at line 596 of file space.hh.

Referenced by RVL::Vector< Scalar >::copy(), RVL::Vector< Scalar >::eval(), RVL::Vector< Scalar >::linComb(), RVL::Vector< Scalar >::negate(), RVL::Vector< Scalar >::scale(), and RVL::Vector< Scalar >::zero().

template<class Scalar>
void RVL::Vector< Scalar >::eval ( FunctionObject f,
vector< Vector< Scalar > const * > &  x 
)

generic evaluation of a FunctionObject

Definition at line 607 of file space.hh.

References RVL::Vector< Scalar >::getDataContainer(), and RVL::Vector< Scalar >::incrementVersion().

Referenced by RVL::OpFO< Scalar >::apply(), RVL::LinearOpFO< Scalar >::apply(), RVL::StdFOFunctional< Scalar, DataType >::apply(), RVL::LinearOpFO< Scalar >::applyAdj(), RVL::OpFO< Scalar >::applyAdjDeriv(), RVL::OpFO< Scalar >::applyDeriv(), RVL::StdFOFunctional< Scalar, DataType >::applyGradient(), RVL::StdFOFunctional< Scalar, DataType >::applyHessian(), and RVL::Vector< Scalar >::eval().

template<class Scalar>
void RVL::Vector< Scalar >::eval ( FunctionObject f  ) 

eval convenience interface: no additional vector args

Definition at line 630 of file space.hh.

References RVL::Vector< Scalar >::eval().

template<class Scalar>
void RVL::Vector< Scalar >::eval ( FunctionObject f,
const Vector< Scalar > &  x 
)

eval convenience interface: one additional vector arg

Definition at line 642 of file space.hh.

References RVL::Vector< Scalar >::eval().

template<class Scalar>
void RVL::Vector< Scalar >::eval ( FunctionObject f,
const Vector< Scalar > &  x,
const Vector< Scalar > &  y 
)

eval convenience interface: two additional vector args

Definition at line 656 of file space.hh.

References RVL::Vector< Scalar >::eval().

template<class Scalar>
void RVL::Vector< Scalar >::eval ( FunctionObject f,
const Vector< Scalar > &  x,
const Vector< Scalar > &  y,
const Vector< Scalar > &  z 
)

eval convenience interface: three additional vector args

Definition at line 672 of file space.hh.

References RVL::Vector< Scalar >::eval().

template<class Scalar>
void RVL::Vector< Scalar >::eval ( FunctionObjectConstEval f,
vector< Vector< Scalar > const * > &  x 
) const

generic evaluation of a FunctionObjectConstEval

Definition at line 690 of file space.hh.

References RVL::Vector< Scalar >::eval(), and RVL::Vector< Scalar >::getDataContainer().

template<class Scalar>
void RVL::Vector< Scalar >::eval ( FunctionObjectConstEval f  )  const

eval convenience interface: no additional vector args

Definition at line 706 of file space.hh.

References RVL::Vector< Scalar >::eval().

template<class Scalar>
void RVL::Vector< Scalar >::eval ( FunctionObjectConstEval f,
const Vector< Scalar > &  x 
) const

eval convenience interface: one additional vector arg

Definition at line 718 of file space.hh.

References RVL::Vector< Scalar >::eval().

template<class Scalar>
void RVL::Vector< Scalar >::eval ( FunctionObjectConstEval f,
const Vector< Scalar > &  x,
const Vector< Scalar > &  y 
) const

eval convenience interface: two additional vector args

Definition at line 732 of file space.hh.

References RVL::Vector< Scalar >::eval().

template<class Scalar>
void RVL::Vector< Scalar >::eval ( FunctionObjectConstEval f,
const Vector< Scalar > &  x,
const Vector< Scalar > &  y,
const Vector< Scalar > &  z 
) const

eval convenience interface: three additional vector args

Definition at line 748 of file space.hh.

References RVL::Vector< Scalar >::eval().

template<class Scalar>
Scalar RVL::Vector< Scalar >::inner ( const Vector< Scalar > &  y  )  const

Inner product.

Definition at line 766 of file space.hh.

References RVL::Vector< Scalar >::getDataContainer().

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

template<class Scalar>
void RVL::Vector< Scalar >::linComb ( Scalar  a,
const Vector< Scalar > &  x,
Scalar  b = ScalarFieldTraits<Scalar>::One() 
)

Linear Combination.

Default: this = a*x + this (i.e. axpy).

Definition at line 777 of file space.hh.

References RVL::Vector< Scalar >::getDataContainer(), and RVL::Vector< Scalar >::incrementVersion().

Referenced by RVL::LinCombOperator< Scalar >::apply(), RVL::ANLOperator< Scalar >::apply(), RVL::ResidualOperator< Scalar >::apply(), RVL::ShiftOperator< Scalar >::apply(), RVL::LinCombLinearOp< Scalar >::apply(), RVL::LinCombLinearOp< Scalar >::applyAdj(), RVL::ColumnLinearOp< Scalar >::applyAdj(), RVL::LinCombOperator< Scalar >::applyAdjDeriv(), RVL::BlockOperator< Scalar >::applyAdjDeriv(), RVL::OpComp< Scalar >::applyAdjDeriv2(), RVL::BlockOperator< Scalar >::applyAdjDeriv2(), RVL::LinearOp< Scalar >::applyAdjOp(), RVL::LinCombOperator< Scalar >::applyDeriv(), RVL::OperatorProductDomain< Scalar >::applyDeriv(), RVL::OpComp< Scalar >::applyDeriv2(), RVL::OperatorProductDomain< Scalar >::applyDeriv2(), RVL::LinCombFunctional< Scalar >::applyGradient(), RVL::FunctionalProductDomain< Scalar >::applyGradient(), RVL::LinCombFunctional< Scalar >::applyHessian(), RVL::LinearOp< Scalar >::applyOp(), RVL::LinearOp< Scalar >::applyPlusAdjOp(), and RVL::LinearOp< Scalar >::applyPlusOp().

template<class Scalar>
void RVL::Vector< Scalar >::zero (  ) 

Assignment to zero vector.

Definition at line 791 of file space.hh.

References RVL::Vector< Scalar >::incrementVersion().

Referenced by RVL::ScaleOpInv< Scalar >::apply(), RVL::ScaleOpFwd< Scalar >::apply(), RVL::OperatorProductDomain< Scalar >::applyAdjDeriv2(), RVL::LinearOp< Scalar >::applyAdjDeriv2(), RVL::ConstLinOpValOp< Scalar >::applyAdjPartialDeriv0(), RVL::LinOpValOp< Scalar >::applyAdjPartialDeriv2(), RVL::ConstLinOpValOp< Scalar >::applyAdjPartialDeriv20(), RVL::InjectOp< Scalar >::applyDeriv(), RVL::OperatorProductDomain< Scalar >::applyDeriv2(), RVL::LinearOp< Scalar >::applyDeriv2(), RVL::NullFunctional< Scalar >::applyGradient(), RVL::NullFunctional< Scalar >::applyHessian(), RVL::ConstLinOpValOp< Scalar >::applyPartialDeriv0(), RVL::LinOpValOp< Scalar >::applyPartialDeriv2(), and RVL::ConstLinOpValOp< Scalar >::applyPartialDeriv20().

template<class Scalar>
void RVL::Vector< Scalar >::copy ( const Vector< Scalar > &  x  ) 

Copy.

Definition at line 805 of file space.hh.

References RVL::Vector< Scalar >::getDataContainer(), and RVL::Vector< Scalar >::incrementVersion().

Referenced by RVL::IdentityOp< Scalar >::apply(), RVL::ShiftOperator< Scalar >::apply(), RVL::ScaleOpInv< Scalar >::apply(), RVL::ScaleOpFwd< Scalar >::apply(), RVL::InjectOp< Scalar >::apply(), RVL::IdentityOp< Scalar >::applyAdjDeriv(), RVL::ShiftOperator< Scalar >::applyAdjDeriv(), RVL::IdentityOp< Scalar >::applyDeriv(), RVL::ShiftOperator< Scalar >::applyDeriv(), RVL::EuclideanForm< Scalar >::applyGradient(), RVL::EuclideanForm< Scalar >::applyHessian(), and RVL::RestrictOp< Scalar >::getMaxStep().

template<class Scalar>
void RVL::Vector< Scalar >::scale ( Scalar  c  ) 

Scale, unary version.

If low-level DCs defer allocation and linComb is properly implemented, no actual data beyond a few pointers will be allocated or accessed for the workspace vector z.

Definition at line 821 of file space.hh.

References RVL::Vector< Scalar >::incrementVersion().

Referenced by RVL::LinCombOperator< Scalar >::apply(), RVL::ScaleOpInv< Scalar >::apply(), RVL::ScaleOpFwd< Scalar >::apply(), RVL::LinCombOperator< Scalar >::applyAdjDeriv(), RVL::LinCombOperator< Scalar >::applyDeriv(), RVL::LinCombFunctional< Scalar >::applyGradient(), and RVL::LinCombFunctional< Scalar >::applyHessian().

template<class Scalar>
void RVL::Vector< Scalar >::scale ( Scalar  c,
const Vector< Scalar > &  x 
)

Scale, binary version.

Definition at line 833 of file space.hh.

References RVL::Vector< Scalar >::getDataContainer(), and RVL::Vector< Scalar >::incrementVersion().

template<class Scalar>
void RVL::Vector< Scalar >::negate (  ) 

Negation, unary version.

Definition at line 845 of file space.hh.

References RVL::Vector< Scalar >::incrementVersion().

template<class Scalar>
void RVL::Vector< Scalar >::negate ( const Vector< Scalar > &  x  ) 

Negation, binary version.

Definition at line 857 of file space.hh.

References RVL::Vector< Scalar >::getDataContainer(), and RVL::Vector< Scalar >::incrementVersion().

template<class Scalar>
NormRetType RVL::Vector< Scalar >::normsq (  )  const

return Norm Squared.

The norm always returns a non-negative real number

Definition at line 870 of file space.hh.

template<class Scalar>
NormRetType RVL::Vector< Scalar >::norm (  )  const

return Norm.

The norm always returns a non-negative real number

Definition at line 881 of file space.hh.

Referenced by RVL::DerivTest().

template<class Scalar>
ostream& RVL::Vector< Scalar >::write ( ostream &  str  )  const [virtual]

Implements RVL::Writeable.

Definition at line 891 of file space.hh.

References RVL::Vector< Scalar >::getDataContainer().

Referenced by RVL::SpaceTest().


Friends And Related Function Documentation

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

Definition at line 424 of file space.hh.


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