1 #ifndef __DEALII_SOLVER_ROL_VECTOR_H__ 2 #define __DEALII_SOLVER_ROL_VECTOR_H__ 4 #include "ROL_Types.hpp" 5 #include "ROL_Vector_SimOpt.hpp" 8 #include "optimization/rol_to_dealii_vector.hpp" 14 template<
typename Real =
double>
23 void print(
const ROL::Vector<Real> &rol_vector)
const 25 const ROL::Vector_SimOpt<Real> *vec_split12 =
dynamic_cast<const ROL::Vector_SimOpt<Real> *
>(&rol_vector);
26 if (vec_split12 == NULL) {
29 const auto vec_1 = vec_split12->get_1();
31 const auto vec_2 = vec_split12->get_2();
46 : rol_vector_ptr(input_vector)
65 const bool leave_elements_uninitialized =
false)
67 rol_vector_ptr = model_vector.
getVector()->clone();
68 if (!leave_elements_uninitialized) {
75 return rol_vector_ptr->dot( *(v.
getVector()) );
81 rol_vector_ptr->setScalar(a);
88 rol_vector_ptr = (x.
getVector())->clone();
95 rol_vector_ptr->scale(a);
109 rol_vector_ptr->axpy(a, *(x.
getVector()) );
142 return std::sqrt( (*
this) * (*
this) );
146 Teuchos::RCP<dealiiSolverVectorWrappingROL>
basis(
int i)
const 148 ROL::Ptr<ROL::Vector<Real>> rol_basis = rol_vector_ptr->basis(i);
158 return rol_vector_ptr->dimension();
164 print(*rol_vector_ptr);
183 const auto &vec_split12 =
dynamic_cast<const ROL::Vector_SimOpt<Real>&
>(*rol_vector_ptr);
184 const auto des = vec_split12.get_1();
185 const auto &des_split =
dynamic_cast<const ROL::Vector_SimOpt<Real>&
>(*des);
187 const auto sim_des = des_split.get_1();
188 const auto ctl_des = des_split.get_2();
189 const auto con = vec_split12.get_2();
191 const auto n1 = sim_des->dimension();
192 const auto n2 = ctl_des->dimension() + n1;
Real value_type
Value type of the entries.
void print() const
Print the underlying deal.II Vector.
ROL::Ptr< const ROL::Vector< Real > > getVector() const
Const accessor.
Real l2_norm() const
Return the l2 norm of the vector.
void sadd(const Real a, const Real b, const dealiiSolverVectorWrappingROL &x)
Scaled addition of vectors.
void reinit(const dealiiSolverVectorWrappingROL &model_vector, const bool leave_elements_uninitialized=false)
Wrap the ROL vector into a vector that can be used by deal.II's solver.
dealiiSolverVectorWrappingROL & operator=(const dealiiSolverVectorWrappingROL &x)
Copy assignment.
dealiiSolverVectorWrappingROL & operator*=(const Real a)
Scale the elements of the current object by a fixed value.
void equ(const Real a, const dealiiSolverVectorWrappingROL &x)
Scaled assignment of a vector.
void add(const Real a, const dealiiSolverVectorWrappingROL &x)
Scaled addition of vectors.
dealiiSolverVectorWrappingROL()=default
Constructor.
ROL::Ptr< ROL::Vector< Real > > getVector()
Accessor.
void add(const dealiiSolverVectorWrappingROL &x)
Addition of vectors.
Real operator*(const dealiiSolverVectorWrappingROL &v) const
Inner product between the current object and the argument.
Real add_and_dot(const Real a, const dealiiSolverVectorWrappingROL &x, const dealiiSolverVectorWrappingROL &v)
dealiiSolverVectorWrappingROL(ROL::Ptr< ROL::Vector< Real >> input_vector)
Constructor where data is given.
dealiiSolverVectorWrappingROL & operator=(const Real a)
Assignment of a scalar.
ROL::Ptr< ROL::Vector< Real > > rol_vector_ptr
Pointer to ROL::Vector<Real> where data is actually stored.
void print(const ROL::Vector< Real > &rol_vector) const
Prints out the vector to std::cout.
const dealii::LinearAlgebra::distributed::Vector< double > & ROL_vector_to_dealii_vector_reference(const ROL::Vector< double > &x)
Access the read-write deali.II Vector stored within the ROL::Vector.
int size() const
Obtain vector size.
Teuchos::RCP< dealiiSolverVectorWrappingROL > basis(int i) const
Returns a vector of the same size with zero entries except for the ith entry being one...
Real operator[](int i) const
Access this ith value of the vector.