72 #include "Teuchos_oblackholestream.hpp"
73 #include "Teuchos_GlobalMPISession.hpp"
74 #include "Teuchos_XMLParameterListHelpers.hpp"
89 typedef std::vector<Real>
svec;
95 typedef Teuchos::RCP<const svec>
pcsv;
98 typedef Teuchos::RCP<svec>
psv;
124 psv kvp = Teuchos::rcp_const_cast<
svec>((Teuchos::dyn_cast<
rvec>(kv)).getVector());
128 (*kvp)[0] = (2.0*(*vp)[0]-(*vp)[1])/dx2;
130 for(
int i=1;i<nx_-1;++i) {
131 (*kvp)[i] = (2.0*(*vp)[i]-(*vp)[i-1]-(*vp)[i+1])/dx2;
134 (*kvp)[nx_-1] = (2.0*(*vp)[nx_-1]-(*vp)[nx_-2])/dx2;
141 Vp_((Teuchos::dyn_cast<
rvec>(const_cast<
Vector<Real> &>(V))).getVector()) {
144 dx_ = (1.0/(1.0+nx_));
158 psv kpsip = Teuchos::rcp(
new svec(nx_, 0.0) );
163 this->applyK(psi,kpsi);
165 for(
int i=0;i<nx_;++i) {
166 J += (*psip)[i]*(*kpsip)[i] + (*Vp_)[i]*pow((*psip)[i],2) + g_*pow((*psip)[i],4);
183 psv gp = Teuchos::rcp_const_cast<
svec>((Teuchos::dyn_cast<
rvec>(g)).getVector());
186 psv kpsip = Teuchos::rcp(
new svec(nx_, 0.0) );
189 this->applyK(psi,kpsi);
191 for(
int i=0;i<nx_;++i) {
192 (*gp)[i] = ((*kpsip)[i] + (*Vp_)[i]*(*psip)[i] + 2.0*g_*pow((*psip)[i],3))*dx_;
210 psv hvp = Teuchos::rcp_const_cast<
svec>((Teuchos::dyn_cast<
rvec>(hv)).getVector());
214 for(
int i=0;i<nx_;++i) {
216 (*hvp)[i] += ( (*Vp_)[i] + 6.0*g_*pow((*psip)[i],2) )*(*vp)[i]*dx_;
228 typedef std::vector<Real>
svec;
234 typedef Teuchos::RCP<const svec>
pcsv;
237 typedef Teuchos::RCP<svec>
psv;
254 psv cp = Teuchos::rcp_const_cast<
svec>((Teuchos::dyn_cast<
rvec>(c)).getVector());
260 for(
int i=0;i<nx_;++i) {
261 (*cp)[0] += dx_*pow((*psip)[i],2);
271 psv jvp = Teuchos::rcp_const_cast<std::vector<Real> >((Teuchos::dyn_cast<
StdVector<Real> >(jv)).getVector());
280 for(
int i=0;i<nx_;++i) {
281 (*jvp)[0] += 2.0*dx_*(*psip)[i]*(*vp)[i];
291 psv ajvp = Teuchos::rcp_const_cast<
svec>((Teuchos::dyn_cast<
rvec>(ajv)).getVector());
299 for(
int i=0;i<nx_;++i) {
300 (*ajvp)[i] = 2.0*dx_*(*psip)[i]*(*vp)[0];
312 psv ahuvp = Teuchos::rcp_const_cast<
svec>((Teuchos::dyn_cast<
rvec>(ahuv)).getVector());
324 for(
int i=0;i<nx_;++i) {
325 (*ahuvp)[i] = 2.0*dx_*(*vp)[i]*(*up)[0];
Provides the interface to evaluate objective functions.
Real value(const Vector< Real > &psi, Real &tol)
Evaluate .
void applyAdjointJacobian(Vector< Real > &ajv, const Vector< Real > &v, const Vector< Real > &psi, Real &tol)
Evaluate .
void value(Vector< Real > &c, const Vector< Real > &psi, Real &tol)
Evaluate .
void hessVec(Vector< Real > &hv, const Vector< Real > &v, const Vector< Real > &psi, Real &tol)
Evaluate .
Teuchos::RCP< const svec > pcsv
Normalization_Constraint(int n, Real dx)
Defines the linear algebra or vector space interface.
void applyJacobian(Vector< Real > &jv, const Vector< Real > &v, const Vector< Real > &psi, Real &tol)
Evaluate .
Defines the equality constraint operator interface.
Provides the std::vector implementation of the ROL::Vector interface.
void applyK(const Vector< Real > &v, Vector< Real > &kv)
Apply finite difference operator.
void gradient(Vector< Real > &g, const Vector< Real > &psi, Real &tol)
Evaluate .
Objective_GrossPitaevskii(const Real &g, const Vector< Real > &V)
void applyAdjointHessian(Vector< Real > &ahuv, const Vector< Real > &u, const Vector< Real > &v, const Vector< Real > &psi, Real &tol)
Evaluate .
Teuchos::RCP< const svec > pcsv