ROL
ROL_MeanValueConstraint_Def.hpp
Go to the documentation of this file.
1 // @HEADER
2 // *****************************************************************************
3 // Rapid Optimization Library (ROL) Package
4 //
5 // Copyright 2014 NTESS and the ROL contributors.
6 // SPDX-License-Identifier: BSD-3-Clause
7 // *****************************************************************************
8 // @HEADER
9 
10 #ifndef ROL_MEANVALUECONSTRAINT_DEF_HPP
11 #define ROL_MEANVALUECONSTRAINT_DEF_HPP
12 
13 namespace ROL {
14 
15 template<typename Real>
17  const Ptr<SampleGenerator<Real>> &sampler)
18  : con_(con) {
19  std::vector<Real> param = computeSampleMean(sampler);
20  con_->setParameter(param);
21 }
22 
23 template<typename Real>
24 void MeanValueConstraint<Real>::update( const Vector<Real> &x, bool flag, int iter ) {
25  con_->update(x,flag,iter);
26 }
27 
28 template<typename Real>
29 void MeanValueConstraint<Real>::update( const Vector<Real> &x, UpdateType type, int iter ) {
30  con_->update(x,type,iter);
31 }
32 
33 template<typename Real>
35  con_->value(c,x,tol);
36 }
37 
38 template<typename Real>
40  con_->applyJacobian(jv,v,x,tol);
41 }
42 
43 template<typename Real>
45  con_->applyAdjointJacobian(ajv,v,x,tol);
46 }
47 
48 template<typename Real>
50  con_->applyAdjointHessian(ahuv,u,v,x,tol);
51 }
52 
53 template<typename Real>
54 std::vector<Real> MeanValueConstraint<Real>::computeSampleMean(const Ptr<SampleGenerator<Real>> &sampler) const {
55  // Compute mean value of inputs and set parameter in constraint
56  int dim = sampler->getMyPoint(0).size(), nsamp = sampler->numMySamples();
57  std::vector<Real> loc(dim), mean(dim), pt(dim);
58  Real wt(0);
59  for (int i = 0; i < nsamp; i++) {
60  pt = sampler->getMyPoint(i);
61  wt = sampler->getMyWeight(i);
62  for (int j = 0; j < dim; j++) {
63  loc[j] += wt*pt[j];
64  }
65  }
66  sampler->sumAll(&loc[0],&mean[0],dim);
67  return mean;
68 }
69 
70 }
71 
72 #endif
void applyAdjointHessian(Vector< Real > &ahuv, const Vector< Real > &u, const Vector< Real > &v, const Vector< Real > &x, Real &tol) override
Apply the derivative of the adjoint of the constraint Jacobian at to vector in direction ...
MeanValueConstraint(const Ptr< Constraint< Real >> &con, const Ptr< SampleGenerator< Real >> &sampler)
Defines the linear algebra or vector space interface.
Definition: ROL_Vector.hpp:46
std::vector< Real > computeSampleMean(const Ptr< SampleGenerator< Real >> &sampler) const
void update(const Vector< Real > &x, bool flag=true, int iter=-1) override
Update constraint functions. x is the optimization variable, flag = true if optimization variable is ...
void applyAdjointJacobian(Vector< Real > &ajv, const Vector< Real > &v, const Vector< Real > &x, Real &tol) override
Apply the adjoint of the the constraint Jacobian at , , to vector .
const Ptr< Constraint< Real > > con_
void value(Vector< Real > &c, const Vector< Real > &x, Real &tol) override
Evaluate the constraint operator at .
constexpr auto dim
Defines the general constraint operator interface.
void applyJacobian(Vector< Real > &jv, const Vector< Real > &v, const Vector< Real > &x, Real &tol) override
Apply the constraint Jacobian at , , to vector .