16#ifndef dealii_optimization_rol_vector_adaptor_h
17#define dealii_optimization_rol_vector_adaptor_h
21#ifdef DEAL_II_TRILINOS_WITH_ROL
26# include <ROL_Vector.hpp>
29# include <type_traits>
110 template <
typename VectorType>
128 static_assert(std::is_convertible<real_type, value_type>::value,
129 "The real_type of the current VectorType is not "
130 "convertible to the value_type.");
149 Teuchos::RCP<VectorType>
230 applyUnary(
const ROL::Elementwise::UnaryFunction<value_type> &f);
237 applyBinary(
const ROL::Elementwise::BinaryFunction<value_type> &f,
245 reduce(
const ROL::Elementwise::ReductionOp<value_type> &r)
const;
259 template <
typename VectorType>
261 const Teuchos::RCP<VectorType> &vector_ptr)
262 : vector_ptr(vector_ptr)
267 template <
typename VectorType>
268 Teuchos::RCP<VectorType>
276 template <
typename VectorType>
285 template <
typename VectorType>
297 template <
typename VectorType>
312 template <
typename VectorType>
328 template <
typename VectorType>
332 Assert(vector_ptr->size() < std::numeric_limits<int>::max(),
333 ExcMessage(
"The size of the vector being used is greater than "
334 "largest value of type int."));
335 return static_cast<int>(vector_ptr->size());
340 template <
typename VectorType>
344 (*vector_ptr) *=
alpha;
349 template <
typename VectorType>
350 typename VectorType::value_type
352 const ROL::Vector<value_type> &
rol_vector)
const
365 template <
typename VectorType>
366 typename VectorType::value_type
369 return vector_ptr->l2_norm();
374 template <
typename VectorType>
379 (*vec_ptr) = (*vector_ptr);
386 template <
typename VectorType>
395 if (vector_ptr->locally_owned_elements().is_element(i))
398 if (
vec_ptr->has_ghost_elements())
400 vec_ptr->update_ghost_values();
414 template <
typename VectorType>
417 const ROL::Elementwise::UnaryFunction<value_type> &f)
419 const typename VectorType::iterator
vend = vector_ptr->
end();
421 for (
typename VectorType::iterator iterator = vector_ptr->begin();
424 *iterator = f.apply(*iterator);
426 if (vector_ptr->has_ghost_elements())
428 vector_ptr->update_ghost_values();
438 template <
typename VectorType>
441 const ROL::Elementwise::BinaryFunction<value_type> &f,
452 const typename VectorType::iterator
vend = vector_ptr->
end();
461 if (vector_ptr->has_ghost_elements())
463 vector_ptr->update_ghost_values();
473 template <
typename VectorType>
474 typename VectorType::value_type
476 const ROL::Elementwise::ReductionOp<value_type> &r)
const
478 typename VectorType::value_type
result = r.initialValue();
480 const typename VectorType::iterator
vend = vector_ptr->
end();
482 for (
typename VectorType::iterator iterator = vector_ptr->begin();
485 r.reduce(*iterator,
result);
493 template <
typename VectorType>
void reinit(value_type *starting_element, const std::size_t n_elements)
void applyBinary(const ROL::Elementwise::BinaryFunction< value_type > &f, const ROL::Vector< value_type > &rol_vector)
Teuchos::RCP< ROL::Vector< value_type > > clone() const
void scale(const value_type alpha)
value_type dot(const ROL::Vector< value_type > &rol_vector) const
void applyUnary(const ROL::Elementwise::UnaryFunction< value_type > &f)
Teuchos::RCP< VectorType > vector_ptr
Teuchos::RCP< VectorType > getVector()
typename VectorType::value_type value_type
VectorAdaptor(const Teuchos::RCP< VectorType > &vector_ptr)
typename VectorType::real_type real_type
void print(std::ostream &outStream) const
typename VectorType::size_type size_type
void set(const ROL::Vector< value_type > &rol_vector)
Teuchos::RCP< const VectorType > getVector() const
void plus(const ROL::Vector< value_type > &rol_vector)
Teuchos::RCP< ROL::Vector< value_type > > basis(const int i) const
void axpy(const value_type alpha, const ROL::Vector< value_type > &rol_vector)
value_type reduce(const ROL::Elementwise::ReductionOp< value_type > &r) const
#define DEAL_II_NAMESPACE_OPEN
#define DEAL_II_NAMESPACE_CLOSE
#define Assert(cond, exc)
static ::ExceptionBase & ExcDimensionMismatch(std::size_t arg1, std::size_t arg2)
static ::ExceptionBase & ExcMessage(std::string arg1)
SymmetricTensor< 2, dim, Number > e(const Tensor< 2, dim, Number > &F)