45 #include "FiniteElement.hpp"
54 template<
class ScalarT>
55 ScalarT operator() (
const ScalarT &u,
const ScalarT &u_x,
const ScalarT &z,
const ScalarT &x) {
62 template<
class ScalarT>
63 ScalarT operator() (
const ScalarT &u,
const ScalarT &u_x,
const ScalarT &z,
const ScalarT &x) {
70 template<
class ScalarT>
71 ScalarT operator() (
const ScalarT &u,
const ScalarT &u_x,
const ScalarT &z,
const ScalarT &x) {
83 VectorFunction<Real,DiffU>
diff_;
84 VectorFunction<Real,ExpU>
exp_;
89 diff_(xl,xr,true,basisp),
90 exp_(xl,xr,false,basisp),
91 minusz_(xl,xr,false,basisp) {
94 template<
class ScalarT>
97 Teuchos::RCP<std::vector<ScalarT> > temp_rcp = Teuchos::rcp(
new std::vector<ScalarT>(n_,0));
102 diff_.evaluate(u,z,c);
103 exp_.evaluate(u,z,temp);
105 minusz_.evaluate(u,z,temp);
115 class BVP_Constraint :
public Sacado_EqualityConstraint_SimOpt<Real,BoundaryValueProblem> {
235 u_targ_rcp_((Teuchos::dyn_cast<
StdVector<Real> >(const_cast<
Vector<Real> &>(u_targ))).getVector() ),
236 basisp_(basisp), ni_(basisp_->ni_), nq_(basisp_->nq_) {}
240 u_targ_rcp_ = Teuchos::rcp_const_cast<std::vector<Real> >((Teuchos::dyn_cast<
StdVector<Real> >(u_targ)).getVector()); }
243 template<
class ScalarT>
246 Teuchos::RCP<const std::vector<ScalarT> > up =
249 Teuchos::RCP<const std::vector<ScalarT> > zp =
252 ScalarT err_norm = 0;
253 ScalarT reg_norm = 0;
256 for(
int j=0; j<nq_; ++j) {
257 ScalarT err_ptwise = 0;
258 ScalarT reg_ptwise = 0;
259 for(
int i=0; i<ni_; ++i) {
260 err_ptwise += ((*up)[i]-(*u_targ_rcp_)[i])*(*basisp_->Lp_)[j+nq_*i];
261 reg_ptwise += (*zp)[i]*(*basisp_->Lp_)[j+nq_*i];
263 err_norm += 0.5*(*basisp_->wqp_)[j]*err_ptwise*err_ptwise;
264 reg_norm += 0.5*(*basisp_->wqp_)[j]*reg_ptwise*reg_ptwise;
267 ScalarT J = err_norm + gamma_*reg_norm;
QuadraticTracking(Real gamma, const Vector< Real > &u_targ, Teuchos::RCP< NodalBasis< Real > > basisp)
Teuchos::RCP< NodalBasis< Real > > basisp_
virtual void plus(const Vector &x)=0
Compute , where .
VectorFunction< Real, MinusZ > minusz_
Teuchos::LAPACK< int, Real > lapack_
virtual void zero()
Set to zero vector.
BVP_Constraint(const BoundaryValueProblem< Real > &bvp)
Defines the linear algebra or vector space interface.
Inherit and add method for applying the inverse partial constraint Jacobian and its adjoint...
BoundaryValueProblem(Real xl, Real xr, Teuchos::RCP< NodalBasis< Real > > basisp)
Provides the std::vector implementation of the ROL::Vector interface.
void update_gamma(Real gamma)
VectorFunction< Real, ExpU > exp_
Compute the constraint vector -u'' + exp(u) - z with natural boundary conditions. ...
VectorFunction< Real, DiffU > diff_
void value(Vector< ScalarT > &c, const Vector< ScalarT > &u, const Vector< ScalarT > &z, Real &tol)
Teuchos::RCP< std::vector< Real > > u_targ_rcp_
ScalarT value(const Vector< ScalarT > &u, const Vector< ScalarT > &z, Real &tol)
Compute .
void update_target(const Vector< Real > &u_targ)