72 #include "Teuchos_oblackholestream.hpp" 73 #include "Teuchos_GlobalMPISession.hpp" 74 #include "Teuchos_XMLParameterListHelpers.hpp" 93 typedef typename vector::size_type
uint;
108 Teuchos::RCP<const vector>
Vp_;
111 using Teuchos::dyn_cast;
112 return dyn_cast<
const SV>(x).getVector();
116 using Teuchos::dyn_cast;
117 return dyn_cast<
SV>(x).getVector();
127 using namespace Teuchos;
130 RCP<const vector> vp = getVector(v);
133 RCP<vector> kvp = getVector(kv);
137 (*kvp)[0] = (2.0*(*vp)[0]-(*vp)[1])/dx2;
139 for(
uint i=1;i<nx_-1;++i) {
140 (*kvp)[i] = (2.0*(*vp)[i]-(*vp)[i-1]-(*vp)[i+1])/dx2;
143 (*kvp)[nx_-1] = (2.0*(*vp)[nx_-1]-(*vp)[nx_-2])/dx2;
151 dx_ = (1.0/(1.0+nx_));
164 RCP<const vector> psip = getVector(psi);
167 RCP<V> kpsi = psi.
clone();
168 RCP<vector> kpsip = getVector(*kpsi);
172 this->applyK(psi,*kpsi);
174 for(
uint i=0;i<nx_;++i) {
175 J += (*psip)[i]*(*kpsip)[i] + (*Vp_)[i]*pow((*psip)[i],2) + g_*pow((*psip)[i],4);
191 RCP<const vector> psip = getVector(psi);
194 RCP<vector> gp = getVector(g);
197 RCP<V> kpsi = psi.
clone();
198 RCP<vector> kpsip = getVector(*kpsi);
202 for(
uint i=0;i<nx_;++i) {
203 (*gp)[i] = ((*kpsip)[i] + (*Vp_)[i]*(*psip)[i] + 2.0*g_*pow((*psip)[i],3))*dx_;
217 RCP<const vector> psip = getVector(psi);
220 RCP<const vector> vp = getVector(v);
223 RCP<vector> hvp = getVector(hv);
227 for(
uint i=0;i<nx_;++i) {
229 (*hvp)[i] += ( (*Vp_)[i] + 6.0*g_*pow((*psip)[i],2) )*(*vp)[i]*dx_;
243 typedef typename vector::size_type
uint;
251 using Teuchos::dyn_cast;
252 return dyn_cast<
const SV>(x).getVector();
256 using Teuchos::dyn_cast;
257 return dyn_cast<
SV>(x).getVector();
273 RCP<vector> cp = getVector(c);
276 RCP<const vector> psip = getVector(psi);
279 for(
uint i=0;i<nx_;++i) {
280 (*cp)[0] += dx_*pow((*psip)[i],2);
292 RCP<vector> jvp = getVector(jv);
295 RCP<const vector> vp = getVector(v);
298 RCP<const vector> psip = getVector(psi);
301 for(
uint i=0;i<nx_;++i) {
302 (*jvp)[0] += 2.0*dx_*(*psip)[i]*(*vp)[i];
314 RCP<vector> ajvp = getVector(ajv);
317 RCP<const vector> vp = getVector(v);
320 RCP<const vector> psip = getVector(psi);
322 for(
uint i=0;i<nx_;++i) {
323 (*ajvp)[i] = 2.0*dx_*(*psip)[i]*(*vp)[0];
337 RCP<vector> ahuvp = getVector(ahuv);
340 RCP<const vector> up = getVector(u);
343 RCP<const vector> vp = getVector(v);
346 RCP<const vector> psip = getVector(psi);
348 for(
uint i=0;i<nx_;++i) {
349 (*ahuvp)[i] = 2.0*dx_*(*vp)[i]*(*up)[0];
Teuchos::RCP< const vector > getVector(const V &x)
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 .
std::vector< Real > vector
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 .
virtual Teuchos::RCP< Vector > clone() const =0
Clone to make a new (uninitialized) vector.
Normalization_Constraint(int n, Real dx)
Defines the linear algebra or vector space interface.
std::vector< Real > vector
void applyJacobian(Vector< Real > &jv, const Vector< Real > &v, const Vector< Real > &psi, Real &tol)
Evaluate .
Defines the equality constraint operator interface.
Teuchos::RCP< const vector > getVector(const V &x)
void applyK(const Vector< Real > &v, Vector< Real > &kv)
Apply finite difference operator.
Teuchos::RCP< const vector > Vp_
Teuchos::RCP< vector > getVector(V &x)
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< vector > getVector(V &x)