16 #ifndef dealii_optimization_rol_vector_adaptor_h 17 #define dealii_optimization_rol_vector_adaptor_h 19 #include <deal.II/base/config.h> 21 #ifdef DEAL_II_TRILINOS_WITH_ROL 22 # include <deal.II/base/exceptions.h> 24 # include <deal.II/lac/vector.h> 26 # include <ROL_Vector.hpp> 28 # include <type_traits> 31 DEAL_II_NAMESPACE_OPEN
114 template <
typename VectorType>
132 static_assert(std::is_convertible<real_type, value_type>::value,
133 "The real_type of the current VectorType is not " 134 "convertible to the value_type.");
153 Teuchos::RCP<VectorType>
159 Teuchos::RCP<const VectorType>
177 set(
const ROL::Vector<value_type> &rol_vector);
183 plus(
const ROL::Vector<value_type> &rol_vector);
190 axpy(
const value_type alpha,
const ROL::Vector<value_type> &rol_vector);
202 dot(
const ROL::Vector<value_type> &rol_vector)
const;
219 Teuchos::RCP<ROL::Vector<value_type>>
227 Teuchos::RCP<ROL::Vector<value_type>>
228 basis(
const int i)
const;
234 applyUnary(
const ROL::Elementwise::UnaryFunction<value_type> &f);
241 applyBinary(
const ROL::Elementwise::BinaryFunction<value_type> &f,
242 const ROL::Vector<value_type> & rol_vector);
249 reduce(
const ROL::Elementwise::ReductionOp<value_type> &r)
const;
255 print(std::ostream &outStream)
const;
263 template <
typename VectorType>
265 const Teuchos::RCP<VectorType> &vector_ptr)
266 : vector_ptr(vector_ptr)
271 template <
typename VectorType>
272 Teuchos::RCP<VectorType>
280 template <
typename VectorType>
281 Teuchos::RCP<const VectorType>
289 template <
typename VectorType>
296 (*vector_ptr) = *(vector_adaptor.
getVector());
301 template <
typename VectorType>
311 *vector_ptr += *(vector_adaptor.
getVector());
316 template <
typename VectorType>
319 const ROL::Vector<value_type> &rol_vector)
327 vector_ptr->add(alpha, *(vector_adaptor.
getVector()));
332 template <
typename VectorType>
336 Assert(vector_ptr->size() < std::numeric_limits<int>::max(),
337 ExcMessage(
"The size of the vector being used is greater than " 338 "largest value of type int."));
339 return static_cast<int>(vector_ptr->size());
344 template <
typename VectorType>
348 (*vector_ptr) *= alpha;
353 template <
typename VectorType>
354 typename VectorType::value_type
356 const ROL::Vector<value_type> &rol_vector)
const 364 return (*vector_ptr) * (*vector_adaptor.
getVector());
369 template <
typename VectorType>
370 typename VectorType::value_type
373 return vector_ptr->l2_norm();
378 template <
typename VectorType>
379 Teuchos::RCP<ROL::Vector<typename VectorType::value_type>>
382 Teuchos::RCP<VectorType> vec_ptr = Teuchos::rcp(
new VectorType);
383 (*vec_ptr) = (*vector_ptr);
390 template <
typename VectorType>
391 Teuchos::RCP<ROL::Vector<typename VectorType::value_type>>
394 Teuchos::RCP<VectorType> vec_ptr = Teuchos::rcp(
new VectorType);
397 vec_ptr->reinit(*vector_ptr,
false);
399 if (vector_ptr->locally_owned_elements().is_element(i))
400 vec_ptr->operator[](i) = 1.;
404 Teuchos::RCP<VectorAdaptor> e = Teuchos::rcp(
new VectorAdaptor(vec_ptr));
411 template <
typename VectorType>
414 const ROL::Elementwise::UnaryFunction<value_type> &f)
416 const typename VectorType::iterator vend = vector_ptr->end();
418 for (
typename VectorType::iterator iterator = vector_ptr->begin();
421 *iterator = f.apply(*iterator);
428 template <
typename VectorType>
431 const ROL::Elementwise::BinaryFunction<value_type> &f,
432 const ROL::Vector<value_type> & rol_vector)
440 const VectorType &given_rol_vector = *(vector_adaptor.
getVector());
442 const typename VectorType::iterator vend = vector_ptr->end();
443 const typename VectorType::const_iterator rolend = given_rol_vector.end();
445 typename VectorType::const_iterator r_iterator = given_rol_vector.begin();
446 for (
typename VectorType::iterator l_iterator = vector_ptr->begin();
447 l_iterator != vend && r_iterator != rolend;
448 l_iterator++, r_iterator++)
449 *l_iterator = f.apply(*l_iterator, *r_iterator);
456 template <
typename VectorType>
457 typename VectorType::value_type
459 const ROL::Elementwise::ReductionOp<value_type> &r)
const 461 typename VectorType::value_type result = r.initialValue();
463 const typename VectorType::iterator vend = vector_ptr->end();
465 for (
typename VectorType::iterator iterator = vector_ptr->begin();
468 r.reduce(*iterator, result);
476 template <
typename VectorType>
480 vector_ptr->print(outStream);
490 DEAL_II_NAMESPACE_CLOSE
493 #endif // DEAL_II_TRILINOS_WITH_ROL 495 #endif // dealii_optimization_rol_vector_adaptor_h void print(std::ostream &outStream) const
void applyBinary(const ROL::Elementwise::BinaryFunction< value_type > &f, const ROL::Vector< value_type > &rol_vector)
Teuchos::RCP< ROL::Vector< value_type > > clone() const
VectorAdaptor(const Teuchos::RCP< VectorType > &vector_ptr)
value_type dot(const ROL::Vector< value_type > &rol_vector) const
Teuchos::RCP< ROL::Vector< value_type > > basis(const int i) const
Teuchos::RCP< VectorType > getVector()
void applyUnary(const ROL::Elementwise::UnaryFunction< value_type > &f)
Teuchos::RCP< VectorType > vector_ptr
typename VectorType::value_type value_type
static::ExceptionBase & ExcMessage(std::string arg1)
void plus(const ROL::Vector< value_type > &rol_vector)
#define Assert(cond, exc)
static::ExceptionBase & ExcDimensionMismatch(std::size_t arg1, std::size_t arg2)
value_type reduce(const ROL::Elementwise::ReductionOp< value_type > &r) const
typename VectorType::real_type real_type
typename VectorType::size_type size_type
void axpy(const value_type alpha, const ROL::Vector< value_type > &rol_vector)
void set(const ROL::Vector< value_type > &rol_vector)
void scale(const value_type alpha)