ROL
Public Member Functions | Private Types | Private Attributes | List of all members
Normalization_Constraint< Real > Class Template Reference

#include <example_01.hpp>

+ Inheritance diagram for Normalization_Constraint< Real >:

Public Member Functions

 Normalization_Constraint (int n, Real dx)
 
void value (Vector< Real > &c, const Vector< Real > &psi, Real &tol)
 Evaluate \(c[\psi]\). More...
 
void applyJacobian (Vector< Real > &jv, const Vector< Real > &v, const Vector< Real > &psi, Real &tol)
 Evaluate \(c'[\psi]v\). More...
 
void applyAdjointJacobian (Vector< Real > &ajv, const Vector< Real > &v, const Vector< Real > &psi, Real &tol)
 Evaluate \((c'[\psi])^\ast v\). More...
 
void applyAdjointHessian (Vector< Real > &ahuv, const Vector< Real > &u, const Vector< Real > &v, const Vector< Real > &psi, Real &tol)
 Evaluate \(((c''[\psi])^\ast v)u\). More...
 
 Normalization_Constraint (int n, Real dx, Teuchos::RCP< FiniteDifference< Real > > fd, bool exactsolve)
 
void value (Vector< Real > &c, const Vector< Real > &psi, Real &tol)
 Evaluate \(c[\psi]\). More...
 
void applyJacobian (Vector< Real > &jv, const Vector< Real > &v, const Vector< Real > &psi, Real &tol)
 Evaluate \(c'[\psi]v\). More...
 
void applyAdjointJacobian (Vector< Real > &ajv, const Vector< Real > &v, const Vector< Real > &psi, Real &tol)
 Evaluate \((c'[\psi])^\ast v\). More...
 
void applyAdjointHessian (Vector< Real > &ahuv, const Vector< Real > &u, const Vector< Real > &v, const Vector< Real > &psi, Real &tol)
 Evaluate \(((c''[\psi])^\ast v)u\). More...
 
std::vector< Real > solveAugmentedSystem (Vector< Real > &v1, Vector< Real > &v2, const Vector< Real > &b1, const Vector< Real > &b2, const Vector< Real > &psi, Real &tol)
 
 Normalization_Constraint (Teuchos::RCP< InnerProductMatrix< Real > > mass)
 
void value (Vector< Real > &c, const Vector< Real > &psi, Real &tol)
 Evaluate the constraint operator \(c:\mathcal{X} \rightarrow \mathcal{C}\) at \(x\). More...
 
void applyJacobian (Vector< Real > &jv, const Vector< Real > &v, const Vector< Real > &psi, Real &tol)
 Apply the constraint Jacobian at \(x\), \(c'(x) \in L(\mathcal{X}, \mathcal{C})\), to vector \(v\). More...
 
void applyAdjointJacobian (Vector< Real > &ajv, const Vector< Real > &v, const Vector< Real > &psi, Real &tol)
 Apply the adjoint of the the constraint Jacobian at \(x\), \(c'(x)^* \in L(\mathcal{C}^*, \mathcal{X}^*)\), to vector \(v\). More...
 
void applyAdjointHessian (Vector< Real > &ahuv, const Vector< Real > &u, const Vector< Real > &v, const Vector< Real > &psi, Real &tol)
 Apply the derivative of the adjoint of the constraint Jacobian at \(x\) to vector \(u\) in direction \(v\), according to \( v \mapsto c''(x)(v,\cdot)^*u \). More...
 
- Public Member Functions inherited from ROL::EqualityConstraint< Real >
virtual ~EqualityConstraint ()
 
virtual void applyAdjointJacobian (Vector< Real > &ajv, const Vector< Real > &v, const Vector< Real > &x, const Vector< Real > &dualv, Real &tol)
 Apply the adjoint of the the constraint Jacobian at \(x\), \(c'(x)^* \in L(\mathcal{C}^*, \mathcal{X}^*)\), to vector \(v\). More...
 
virtual void applyPreconditioner (Vector< Real > &pv, const Vector< Real > &v, const Vector< Real > &x, const Vector< Real > &g, Real &tol)
 Apply a constraint preconditioner at \(x\), \(P(x) \in L(\mathcal{C}, \mathcal{C}^*)\), to vector \(v\). Ideally, this preconditioner satisfies the following relationship:

\[ \left[c'(x) \circ R \circ c'(x)^* \circ P(x)\right] v = v \,, \]

where R is the appropriate Riesz map in \(L(\mathcal{X}^*, \mathcal{X})\). It is used by the solveAugmentedSystem method. More...

 
 EqualityConstraint (void)
 
virtual void update (const Vector< Real > &x, bool flag=true, int iter=-1)
 Update constraint functions. x is the optimization variable, flag = true if optimization variable is changed, iter is the outer algorithm iterations count. More...
 
virtual bool isFeasible (const Vector< Real > &v)
 Check if the vector, v, is feasible. More...
 
void activate (void)
 Turn on constraints. More...
 
void deactivate (void)
 Turn off constraints. More...
 
bool isActivated (void)
 Check if constraints are on. More...
 
virtual std::vector
< std::vector< Real > > 
checkApplyJacobian (const Vector< Real > &x, const Vector< Real > &v, const Vector< Real > &jv, const std::vector< Real > &steps, const bool printToStream=true, std::ostream &outStream=std::cout, const int order=1)
 Finite-difference check for the constraint Jacobian application. More...
 
virtual std::vector
< std::vector< Real > > 
checkApplyJacobian (const Vector< Real > &x, const Vector< Real > &v, const Vector< Real > &jv, const bool printToStream=true, std::ostream &outStream=std::cout, const int numSteps=ROL_NUM_CHECKDERIV_STEPS, const int order=1)
 Finite-difference check for the constraint Jacobian application. More...
 
virtual std::vector
< std::vector< Real > > 
checkApplyAdjointJacobian (const Vector< Real > &x, const Vector< Real > &v, const Vector< Real > &c, const Vector< Real > &ajv, const bool printToStream=true, std::ostream &outStream=std::cout, const int numSteps=ROL_NUM_CHECKDERIV_STEPS)
 Finite-difference check for the application of the adjoint of constraint Jacobian. More...
 
virtual Real checkAdjointConsistencyJacobian (const Vector< Real > &w, const Vector< Real > &v, const Vector< Real > &x, const bool printToStream=true, std::ostream &outStream=std::cout)
 
virtual Real checkAdjointConsistencyJacobian (const Vector< Real > &w, const Vector< Real > &v, const Vector< Real > &x, const Vector< Real > &dualw, const Vector< Real > &dualv, const bool printToStream=true, std::ostream &outStream=std::cout)
 
virtual std::vector
< std::vector< Real > > 
checkApplyAdjointHessian (const Vector< Real > &x, const Vector< Real > &u, const Vector< Real > &v, const Vector< Real > &hv, const std::vector< Real > &step, const bool printToScreen=true, std::ostream &outStream=std::cout, const int order=1)
 Finite-difference check for the application of the adjoint of constraint Hessian. More...
 
virtual std::vector
< std::vector< Real > > 
checkApplyAdjointHessian (const Vector< Real > &x, const Vector< Real > &u, const Vector< Real > &v, const Vector< Real > &hv, const bool printToScreen=true, std::ostream &outStream=std::cout, const int numSteps=ROL_NUM_CHECKDERIV_STEPS, const int order=1)
 Finite-difference check for the application of the adjoint of constraint Hessian. More...
 

Private Types

typedef std::vector< Real > svec
 
typedef StdVector< Real > rvec
 
typedef Teuchos::RCP< const svecpcsv
 
typedef Teuchos::RCP< svecpsv
 

Private Attributes

int nx_
 
Real dx_
 
Teuchos::RCP< FiniteDifference
< Real > > 
fd_
 
bool exactsolve_
 
Teuchos::RCP
< InnerProductMatrix< Real > > 
mass_
 

Detailed Description

template<class Real>
class Normalization_Constraint< Real >

Constraint class

Definition at line 225 of file gross-pitaevskii/example_01.hpp.

Member Typedef Documentation

template<class Real>
typedef std::vector<Real> Normalization_Constraint< Real >::svec
private

Definition at line 228 of file gross-pitaevskii/example_01.hpp.

template<class Real>
typedef StdVector<Real> Normalization_Constraint< Real >::rvec
private

Definition at line 231 of file gross-pitaevskii/example_01.hpp.

template<class Real>
typedef Teuchos::RCP<const svec> Normalization_Constraint< Real >::pcsv
private

Definition at line 234 of file gross-pitaevskii/example_01.hpp.

template<class Real>
typedef Teuchos::RCP<svec> Normalization_Constraint< Real >::psv
private

Definition at line 237 of file gross-pitaevskii/example_01.hpp.

Constructor & Destructor Documentation

template<class Real>
Normalization_Constraint< Real >::Normalization_Constraint ( int  n,
Real  dx 
)
inline

Definition at line 244 of file gross-pitaevskii/example_01.hpp.

template<class Real>
Normalization_Constraint< Real >::Normalization_Constraint ( int  n,
Real  dx,
Teuchos::RCP< FiniteDifference< Real > >  fd,
bool  exactsolve 
)
inline

Definition at line 568 of file gross-pitaevskii/example_02.hpp.

template<class Real>
Normalization_Constraint< Real >::Normalization_Constraint ( Teuchos::RCP< InnerProductMatrix< Real > >  mass)
inline

Definition at line 527 of file gross-pitaevskii/example_03.hpp.

Member Function Documentation

template<class Real>
void Normalization_Constraint< Real >::value ( Vector< Real > &  c,
const Vector< Real > &  psi,
Real &  tol 
)
inlinevirtual

Evaluate \(c[\psi]\).

\[ c[\psi]= \int\limits_0^1 |\psi|^2\,\mathrm{d}x - 1 \]

where the integral is approximated with the trapezoidal rule and the derivative is approximated using finite differences. This constraint is a scalar

Implements ROL::EqualityConstraint< Real >.

Definition at line 251 of file gross-pitaevskii/example_01.hpp.

template<class Real>
void Normalization_Constraint< Real >::applyJacobian ( Vector< Real > &  jv,
const Vector< Real > &  v,
const Vector< Real > &  psi,
Real &  tol 
)
inlinevirtual

Evaluate \(c'[\psi]v\).

\[ c'[\psi]v= 2 \int\limits_0^1 \psi v\,\mathrm{d}x \]

The action of the Jacobian on a vector produces a scalar

Reimplemented from ROL::EqualityConstraint< Real >.

Definition at line 268 of file gross-pitaevskii/example_01.hpp.

template<class Real>
void Normalization_Constraint< Real >::applyAdjointJacobian ( Vector< Real > &  ajv,
const Vector< Real > &  v,
const Vector< Real > &  psi,
Real &  tol 
)
inlinevirtual

Evaluate \((c'[\psi])^\ast v\).

\[ (c'[\psi])^\ast v = 2 \int\limits_0^1 \psi v\,\mathrm{d}x \]

The action of the Jacobian adjoint on a scalar produces a vector

Reimplemented from ROL::EqualityConstraint< Real >.

Definition at line 288 of file gross-pitaevskii/example_01.hpp.

template<class Real>
void Normalization_Constraint< Real >::applyAdjointHessian ( Vector< Real > &  ahuv,
const Vector< Real > &  u,
const Vector< Real > &  v,
const Vector< Real > &  psi,
Real &  tol 
)
inlinevirtual

Evaluate \(((c''[\psi])^\ast v)u\).

\[ ((c''[\psi])^\ast v)u = 2 v u \]

The action of the Hessian adjoint on a on a vector v in a direction u produces a vector of the same size as \(\psi\)

Reimplemented from ROL::EqualityConstraint< Real >.

Definition at line 308 of file gross-pitaevskii/example_01.hpp.

template<class Real>
void Normalization_Constraint< Real >::value ( Vector< Real > &  c,
const Vector< Real > &  psi,
Real &  tol 
)
inlinevirtual

Evaluate \(c[\psi]\).

\[ c[\psi]= \int\limits_0^1 |\psi|^2\,\mathrm{d}x - 1 \]

where the integral is approximated with the trapezoidal rule and the derivative is approximated using finite differences. This constraint is a scalar

Implements ROL::EqualityConstraint< Real >.

Definition at line 576 of file gross-pitaevskii/example_02.hpp.

template<class Real>
void Normalization_Constraint< Real >::applyJacobian ( Vector< Real > &  jv,
const Vector< Real > &  v,
const Vector< Real > &  psi,
Real &  tol 
)
inlinevirtual

Evaluate \(c'[\psi]v\).

\[ c'[\psi]v= 2 \int\limits_0^1 \psi v\,\mathrm{d}x \]

The action of the Jacobian on a vector produces a scalar

Reimplemented from ROL::EqualityConstraint< Real >.

Definition at line 596 of file gross-pitaevskii/example_02.hpp.

template<class Real>
void Normalization_Constraint< Real >::applyAdjointJacobian ( Vector< Real > &  ajv,
const Vector< Real > &  v,
const Vector< Real > &  psi,
Real &  tol 
)
inlinevirtual

Evaluate \((c'[\psi])^\ast v\).

\[ (c'[\psi])^\ast v = 2 \int\limits_0^1 \psi v\,\mathrm{d}x \]

The action of the Jacobian adjoint on a scalar produces a vector

Reimplemented from ROL::EqualityConstraint< Real >.

Definition at line 619 of file gross-pitaevskii/example_02.hpp.

template<class Real>
void Normalization_Constraint< Real >::applyAdjointHessian ( Vector< Real > &  ahuv,
const Vector< Real > &  u,
const Vector< Real > &  v,
const Vector< Real > &  psi,
Real &  tol 
)
inlinevirtual

Evaluate \(((c''[\psi])^\ast v)u\).

\[ ((c''[\psi])^\ast v)u = 2 v u \]

The action of the Hessian adjoint on a on a vector v in a direction u produces a vector of the same size as \(\psi\)

Reimplemented from ROL::EqualityConstraint< Real >.

Definition at line 642 of file gross-pitaevskii/example_02.hpp.

template<class Real>
std::vector<Real> Normalization_Constraint< Real >::solveAugmentedSystem ( Vector< Real > &  v1,
Vector< Real > &  v2,
const Vector< Real > &  b1,
const Vector< Real > &  b2,
const Vector< Real > &  psi,
Real &  tol 
)
inlinevirtual

Solve the system

\[ \begin{\pmatrix} K & c'^\ast(\psi)\\ c'(\psi) & 0 \end{pmatrix} \begin{pmatrix} v_1\\v_2 \end{pmatrix}=\begin{pmatrix} b_1\\b_2\end{pmatrix}\]

In this example, \(K\) is the finite difference Laplacian the constraint is a scalar and the Jacobian is a vector and the exact inverse can be computed using the Schur complement method

Reimplemented from ROL::EqualityConstraint< Real >.

Definition at line 669 of file gross-pitaevskii/example_02.hpp.

References ROL::Vector< Real >::plus(), ROL::Vector< Real >::scale(), ROL::Vector< Real >::set(), and ROL::EqualityConstraint< Real >::solveAugmentedSystem().

template<class Real>
void Normalization_Constraint< Real >::value ( Vector< Real > &  c,
const Vector< Real > &  x,
Real &  tol 
)
inlinevirtual

Evaluate the constraint operator \(c:\mathcal{X} \rightarrow \mathcal{C}\) at \(x\).

Parameters
[out]cis the result of evaluating the constraint operator at x; a constraint-space vector
[in]xis the constraint argument; an optimization-space vector
[in,out]tolis a tolerance for inexact evaluations; currently unused

On return, \(\mathsf{c} = c(x)\), where \(\mathsf{c} \in \mathcal{C}\), \(\mathsf{x} \in \mathcal{X}\).


Implements ROL::EqualityConstraint< Real >.

Definition at line 530 of file gross-pitaevskii/example_03.hpp.

template<class Real>
void Normalization_Constraint< Real >::applyJacobian ( Vector< Real > &  jv,
const Vector< Real > &  v,
const Vector< Real > &  x,
Real &  tol 
)
inlinevirtual

Apply the constraint Jacobian at \(x\), \(c'(x) \in L(\mathcal{X}, \mathcal{C})\), to vector \(v\).

Parameters
[out]jvis the result of applying the constraint Jacobian to v at x; a constraint-space vector
[in]vis an optimization-space vector
[in]xis the constraint argument; an optimization-space vector
[in,out]tolis a tolerance for inexact evaluations; currently unused

On return, \(\mathsf{jv} = c'(x)v\), where \(v \in \mathcal{X}\), \(\mathsf{jv} \in \mathcal{C}\).

The default implementation is a finite-difference approximation.


Reimplemented from ROL::EqualityConstraint< Real >.

Definition at line 543 of file gross-pitaevskii/example_03.hpp.

template<class Real>
void Normalization_Constraint< Real >::applyAdjointJacobian ( Vector< Real > &  ajv,
const Vector< Real > &  v,
const Vector< Real > &  x,
Real &  tol 
)
inlinevirtual

Apply the adjoint of the the constraint Jacobian at \(x\), \(c'(x)^* \in L(\mathcal{C}^*, \mathcal{X}^*)\), to vector \(v\).

Parameters
[out]ajvis the result of applying the adjoint of the constraint Jacobian to v at x; a dual optimization-space vector
[in]vis a dual constraint-space vector
[in]xis the constraint argument; an optimization-space vector
[in,out]tolis a tolerance for inexact evaluations; currently unused

On return, \(\mathsf{ajv} = c'(x)^*v\), where \(v \in \mathcal{C}^*\), \(\mathsf{ajv} \in \mathcal{X}^*\).

The default implementation is a finite-difference approximation.


Reimplemented from ROL::EqualityConstraint< Real >.

Definition at line 559 of file gross-pitaevskii/example_03.hpp.

template<class Real>
void Normalization_Constraint< Real >::applyAdjointHessian ( Vector< Real > &  ahuv,
const Vector< Real > &  u,
const Vector< Real > &  v,
const Vector< Real > &  x,
Real &  tol 
)
inlinevirtual

Apply the derivative of the adjoint of the constraint Jacobian at \(x\) to vector \(u\) in direction \(v\), according to \( v \mapsto c''(x)(v,\cdot)^*u \).

Parameters
[out]ahuvis the result of applying the derivative of the adjoint of the constraint Jacobian at x to vector u in direction v; a dual optimization-space vector
[in]uis the direction vector; a dual constraint-space vector
[in]vis an optimization-space vector
[in]xis the constraint argument; an optimization-space vector
[in,out]tolis a tolerance for inexact evaluations; currently unused

On return, \( \mathsf{ahuv} = c''(x)(v,\cdot)^*u \), where \(u \in \mathcal{C}^*\), \(v \in \mathcal{X}\), and \(\mathsf{ahuv} \in \mathcal{X}^*\).

The default implementation is a finite-difference approximation based on the adjoint Jacobian.


Reimplemented from ROL::EqualityConstraint< Real >.

Definition at line 578 of file gross-pitaevskii/example_03.hpp.

Member Data Documentation

template<class Real>
int Normalization_Constraint< Real >::nx_
private

Definition at line 240 of file gross-pitaevskii/example_01.hpp.

template<class Real>
Real Normalization_Constraint< Real >::dx_
private

Definition at line 241 of file gross-pitaevskii/example_01.hpp.

template<class Real>
Teuchos::RCP<FiniteDifference<Real> > Normalization_Constraint< Real >::fd_
private

Definition at line 564 of file gross-pitaevskii/example_02.hpp.

template<class Real>
bool Normalization_Constraint< Real >::exactsolve_
private

Definition at line 565 of file gross-pitaevskii/example_02.hpp.

template<class Real>
Teuchos::RCP<InnerProductMatrix<Real> > Normalization_Constraint< Real >::mass_
private

Definition at line 524 of file gross-pitaevskii/example_03.hpp.


The documentation for this class was generated from the following files: