109 template <
typename VectorType>
127 static_assert(std::is_convertible_v<real_type, value_type>,
128 "The real_type of the current VectorType is not "
129 "convertible to the value_type.");
152 ROL::Ptr<const VectorType>
170 set(
const ROL::Vector<value_type> &rol_vector);
176 plus(
const ROL::Vector<value_type> &rol_vector);
195 dot(
const ROL::Vector<value_type> &rol_vector)
const;
212 ROL::Ptr<ROL::Vector<value_type>>
219 ROL::Ptr<ROL::Vector<value_type>>
226 applyUnary(
const ROL::Elementwise::UnaryFunction<value_type> &f);
233 applyBinary(
const ROL::Elementwise::BinaryFunction<value_type> &f,
234 const ROL::Vector<value_type> &rol_vector);
241 reduce(
const ROL::Elementwise::ReductionOp<value_type> &r)
const;
247 print(std::ostream &outStream)
const;
255 template <
typename VectorType>
257 const ROL::Ptr<VectorType> &vector_ptr)
258 : vector_ptr(vector_ptr)
263 template <
typename VectorType>
272 template <
typename VectorType>
273 ROL::Ptr<const VectorType>
281 template <
typename VectorType>
285 const VectorAdaptor &vector_adaptor =
286 dynamic_cast<const VectorAdaptor &
>(rol_vector);
288 (*vector_ptr) = *(vector_adaptor.getVector());
293 template <
typename VectorType>
297 Assert(this->dimension() == rol_vector.dimension(),
300 const VectorAdaptor &vector_adaptor =
301 dynamic_cast<const VectorAdaptor &
>(rol_vector);
303 *vector_ptr += *(vector_adaptor.getVector());
308 template <
typename VectorType>
311 const ROL::Vector<value_type> &rol_vector)
313 Assert(this->dimension() == rol_vector.dimension(),
316 const VectorAdaptor &vector_adaptor =
317 dynamic_cast<const VectorAdaptor &
>(rol_vector);
319 vector_ptr->add(alpha, *(vector_adaptor.getVector()));
324 template <
typename VectorType>
328 Assert(vector_ptr->size() < std::numeric_limits<int>::max(),
329 ExcMessage(
"The size of the vector being used is greater than "
330 "largest value of type int."));
331 return static_cast<int>(vector_ptr->size());
336 template <
typename VectorType>
340 (*vector_ptr) *= alpha;
345 template <
typename VectorType>
346 typename VectorType::value_type
348 const ROL::Vector<value_type> &rol_vector)
const
350 Assert(this->dimension() == rol_vector.dimension(),
353 const VectorAdaptor &vector_adaptor =
354 dynamic_cast<const VectorAdaptor &
>(rol_vector);
356 return (*vector_ptr) * (*vector_adaptor.getVector());
361 template <
typename VectorType>
362 typename VectorType::value_type
365 return vector_ptr->l2_norm();
370 template <
typename VectorType>
371 ROL::Ptr<ROL::Vector<typename VectorType::value_type>>
374 ROL::Ptr<VectorType> vec_ptr = ROL::makePtr<VectorType>(*vector_ptr);
376 return ROL::makePtr<VectorAdaptor>(vec_ptr);
381 template <
typename VectorType>
382 ROL::Ptr<ROL::Vector<typename VectorType::value_type>>
385 ROL::Ptr<VectorType> vec_ptr = ROL::makePtr<VectorType>();
388 vec_ptr->reinit(*vector_ptr,
false);
390 if (vector_ptr->locally_owned_elements().is_element(i))
391 vec_ptr->operator[](i) = 1.;
393 if (vec_ptr->has_ghost_elements())
395 vec_ptr->update_ghost_values();
402 return ROL::makePtr<VectorAdaptor>(vec_ptr);
407 template <
typename VectorType>
410 const ROL::Elementwise::UnaryFunction<value_type> &f)
412 const typename VectorType::iterator vend = vector_ptr->end();
414 for (
typename VectorType::iterator iterator = vector_ptr->begin();
417 *iterator = f.apply(*iterator);
419 if (vector_ptr->has_ghost_elements())
421 vector_ptr->update_ghost_values();
431 template <
typename VectorType>
434 const ROL::Elementwise::BinaryFunction<value_type> &f,
435 const ROL::Vector<value_type> &rol_vector)
437 Assert(this->dimension() == rol_vector.dimension(),
440 const VectorAdaptor &vector_adaptor =
441 dynamic_cast<const VectorAdaptor &
>(rol_vector);
443 const VectorType &given_rol_vector = *(vector_adaptor.getVector());
445 const typename VectorType::iterator vend = vector_ptr->end();
446 const typename VectorType::const_iterator rolend = given_rol_vector.end();
448 typename VectorType::const_iterator r_iterator = given_rol_vector.begin();
449 for (
typename VectorType::iterator l_iterator = vector_ptr->begin();
450 l_iterator != vend && r_iterator != rolend;
451 l_iterator++, r_iterator++)
452 *l_iterator = f.apply(*l_iterator, *r_iterator);
454 if (vector_ptr->has_ghost_elements())
456 vector_ptr->update_ghost_values();
466 template <
typename VectorType>
467 typename VectorType::value_type
469 const ROL::Elementwise::ReductionOp<value_type> &r)
const
471 typename VectorType::value_type result = r.initialValue();
473 const typename VectorType::iterator vend = vector_ptr->end();
475 for (
typename VectorType::iterator iterator = vector_ptr->begin();
478 r.reduce(*iterator, result);
486 template <
typename VectorType>
490 vector_ptr->print(outStream);