ROL
ROL_WrappedVector.hpp
Go to the documentation of this file.
1// @HEADER
2// ************************************************************************
3//
4// Rapid Optimization Library (ROL) Package
5// Copyright (2014) Sandia Corporation
6//
7// Under terms of Contract DE-AC04-94AL85000, there is a non-exclusive
8// license for use of this work by or on behalf of the U.S. Government.
9//
10// Redistribution and use in source and binary forms, with or without
11// modification, are permitted provided that the following conditions are
12// met:
13//
14// 1. Redistributions of source code must retain the above copyright
15// notice, this list of conditions and the following disclaimer.
16//
17// 2. Redistributions in binary form must reproduce the above copyright
18// notice, this list of conditions and the following disclaimer in the
19// documentation and/or other materials provided with the distribution.
20//
21// 3. Neither the name of the Corporation nor the names of the
22// contributors may be used to endorse or promote products derived from
23// this software without specific prior written permission.
24//
25// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY
26// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
27// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
28// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE
29// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
30// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
31// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
32// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
33// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
34// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
35// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36//
37// Questions? Contact lead developers:
38// Drew Kouri (dpkouri@sandia.gov) and
39// Denis Ridzal (dridzal@sandia.gov)
40//
41// ************************************************************************
42// @HEADER
43
44
45#pragma once
46#ifndef ROL_WRAPPEDVECTOR_HPP
47#define ROL_WRAPPEDVECTOR_HPP
48
49
50namespace ROL {
51
66template<typename Real>
68
69 using V = Vector<Real>;
72
73private:
74
75 mutable Ptr<V> vec_;
76
77
78public:
79
80 WrappedVector( const Ptr<V>& vec ) : vec_(vec) {}
81
82 virtual ~WrappedVector() {}
83
84 virtual void plus( const V& x ) override { vec_->plus(x); }
85 virtual void scale( const Real alpha ) override { vec_->scale(alpha); }
86
87 virtual Real dot( const V& x ) const override { return vec_->dot(x); }
88
89 virtual Real norm() const override { return std::sqrt( this->dot(*this) ); }
90
91 virtual Ptr<V> clone() const override {
92 return makePtr<WrappedVector>( vec_->clone() );
93 }
94
95 virtual void axpy( const Real alpha, const V& x ) override {
96 vec_->axpy( alpha, x );
97 }
98
99 virtual Ptr<V> basis( const int i ) const override {
100 return makePtr<VPrim>( vec_->basis(i) );
101 }
102
103 virtual int dimension() const override { return vec_->dimension(); }
104
105 virtual void set( const V& x ) override { vec_->set(x); }
106
107 virtual void const V& dual() const override { return vec_->dual(); }
108
109 virtual Real apply( const V& x ) const override { return vec_->apply(x); }
110
111 virtual void applyUnary( const Elementwise::UnaryFunction<Real>& f ) override {
112 vec_->applyUnary(f);
113 }
114
115 virtual void applyBinary( const Elementwise::BinaryFunction<Real>& f,
116 const V& x ) override {
117 vec_->applyBinary(f,x);
118 }
119
120 virtual Real reduce( const Elementwise::ReductionOp<Real>& r ) const override {
121 return vec_->reduce(r);
122 }
123
124 virtual void setScalar( const Real C ) override { vec_->setScalar(C); }
125
126 virtual void randomize( const Real l=0.0, const Real u=1.0 ) override {
127 vec_->randomize(l,u);
128 }
129
130 virtual void print( std::ostream& os ) override { vec_->print(os); }
131
132 const Ptr<V>& getVector() { return vec_; }
133 const Ptr<const V>& getVector() const { return vec_; }
134
135 virtual void setVector( const Ptr<const V>& vec ) const { vec_ = vec; }
136
137}; // class PrimalScaledVector
138
139
140
141
142} // namespace ROL
143
144
145#endif
Provides the implementation of the ROL::Vector interface that handles scalings in the inner product....
Provides the implementation of the ROL::Vector interface that handles scalings in the inner product....
virtual int dimension() const override
virtual Real apply(const V &x) const override
virtual Real dot(const V &x) const override
virtual void applyUnary(const Elementwise::UnaryFunction< Real > &f) override
virtual void randomize(const Real l=0.0, const Real u=1.0) override
virtual void scale(const Real alpha) override
virtual Ptr< V > clone() const override
const Ptr< V > & getVector()
virtual Real reduce(const Elementwise::ReductionOp< Real > &r) const override
virtual void axpy(const Real alpha, const V &x) override
virtual void set(const V &x) override
const Ptr< const V > & getVector() const
virtual void print(std::ostream &os) override
virtual void setScalar(const Real C) override
WrappedVector(const Ptr< V > &vec)
virtual void setVector(const Ptr< const V > &vec) const
virtual void const V & dual() const override
virtual Real norm() const override
virtual Ptr< V > basis(const int i) const override
virtual void applyBinary(const Elementwise::BinaryFunction< Real > &f, const V &x) override
virtual void plus(const V &x) override
Defines the linear algebra or vector space interface.
Definition: ROL_Vector.hpp:84