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
13namespace ROL {
14
15template<typename Real>
17 const Ptr<SampleGenerator<Real>> &sampler)
18 : con_(con) {
19 std::vector<Real> param = computeSampleMean(sampler);
20 con_->setParameter(param);
21}
22
23template<typename Real>
24void MeanValueConstraint<Real>::update( const Vector<Real> &x, bool flag, int iter ) {
25 con_->update(x,flag,iter);
26}
27
28template<typename Real>
30 con_->update(x,type,iter);
31}
32
33template<typename Real>
35 con_->value(c,x,tol);
36}
37
38template<typename Real>
40 con_->applyJacobian(jv,v,x,tol);
41}
42
43template<typename Real>
45 con_->applyAdjointJacobian(ajv,v,x,tol);
46}
47
48template<typename Real>
50 con_->applyAdjointHessian(ahuv,u,v,x,tol);
51}
52
53template<typename Real>
54std::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
Defines the general constraint operator interface.
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 ,...
std::vector< Real > computeSampleMean(const Ptr< SampleGenerator< Real > > &sampler) const
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 .
void applyJacobian(Vector< Real > &jv, const Vector< Real > &v, const Vector< Real > &x, Real &tol) override
Apply the constraint Jacobian at , , to vector .
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 i...
MeanValueConstraint(const Ptr< Constraint< Real > > &con, const Ptr< SampleGenerator< Real > > &sampler)
void value(Vector< Real > &c, const Vector< Real > &x, Real &tol) override
Evaluate the constraint operator at .
const Ptr< Constraint< Real > > con_
Defines the linear algebra or vector space interface.
constexpr auto dim