iterative-solver 0.0
 
Loading...
Searching...
No Matches
molpro::linalg::itsolv::subspace::SubspaceSolverDIIS< RT, QT, PT > Class Template Reference

Solves non-linear equations using DIIS. More...

#include <SubspaceSolverDIIS.h>

Inheritance diagram for molpro::linalg::itsolv::subspace::SubspaceSolverDIIS< RT, QT, PT >:
Collaboration diagram for molpro::linalg::itsolv::subspace::SubspaceSolverDIIS< RT, QT, PT >:

Detailed Description

template<class RT, class QT, class PT>
class molpro::linalg::itsolv::subspace::SubspaceSolverDIIS< RT, QT, PT >

Solves non-linear equations using DIIS.

Public Types

using value_type = typename ISubspaceSolver< RT, QT, PT >::value_type
 
using value_type_abs = typename ISubspaceSolver< RT, QT, PT >::value_type_abs
 
using R = typename ISubspaceSolver< RT, QT, PT >::R
 
using Q = typename ISubspaceSolver< RT, QT, PT >::Q
 
using P = typename ISubspaceSolver< RT, QT, PT >::P
 
- Public Types inherited from molpro::linalg::itsolv::subspace::ISubspaceSolver< RT, QT, PT >
using R = RT
 
using Q = QT
 
using P = PT
 
using value_type = typename array::ArrayHandler< R, R >::value_type
 
using value_type_abs = typename array::ArrayHandler< R, R >::value_type_abs
 

Public Member Functions

 SubspaceSolverDIIS (std::shared_ptr< Logger > logger, const bool &converged)
 
void solve (IXSpace< R, Q, P > &xspace, const size_t nroots_max) override
 Solve the subspace problem.
 
void set_error (int root, value_type_abs error) override
 Set error value for solution root
 
void set_error (const std::vector< int > &roots, const std::vector< value_type_abs > &errors) override
 Update errors for a group of roots.
 
const Matrix< value_type > & solutions () const override
 Access solutions from the last solve() call.
 
const std::vector< value_type > & eigenvalues () const override
 Access eigenvalues from the last solve() call.
 
const std::vector< value_type_abs > & errors () const override
 Access errors corresponding to each solution.
 
size_t size () const override
 Number of solutions.
 
void set_logger (std::shared_ptr< Logger > logger) override
 
- Public Member Functions inherited from molpro::linalg::itsolv::subspace::ISubspaceSolver< RT, QT, PT >
virtual ~ISubspaceSolver ()=default
 

Public Attributes

value_type_abs m_svd_solver_threshold = precision_scaled<value_type_abs>(1e-14)
 threshold to select null space during SVD in eigenproblem, rescaled from double to the working precision
 

Protected Attributes

Matrix< value_type > m_solutions
 solution matrix with row vectors
 
std::vector< value_type_abs > m_errors
 errors in subspace solutions
 
std::shared_ptr< Logger > m_logger {}
 

Member Typedef Documentation

◆ P

◆ Q

◆ R

◆ value_type

◆ value_type_abs

Constructor & Destructor Documentation

◆ SubspaceSolverDIIS()

template<class RT , class QT , class PT >
molpro::linalg::itsolv::subspace::SubspaceSolverDIIS< RT, QT, PT >::SubspaceSolverDIIS ( std::shared_ptr< Logger >  logger,
const bool &  converged 
)
inlineexplicit

Member Function Documentation

◆ eigenvalues()

template<class RT , class QT , class PT >
const std::vector< value_type > & molpro::linalg::itsolv::subspace::SubspaceSolverDIIS< RT, QT, PT >::eigenvalues ( ) const
inlineoverridevirtual

Access eigenvalues from the last solve() call.

Implements molpro::linalg::itsolv::subspace::ISubspaceSolver< RT, QT, PT >.

◆ errors()

template<class RT , class QT , class PT >
const std::vector< value_type_abs > & molpro::linalg::itsolv::subspace::SubspaceSolverDIIS< RT, QT, PT >::errors ( ) const
inlineoverridevirtual

Access errors corresponding to each solution.

Implements molpro::linalg::itsolv::subspace::ISubspaceSolver< RT, QT, PT >.

◆ set_error() [1/2]

template<class RT , class QT , class PT >
void molpro::linalg::itsolv::subspace::SubspaceSolverDIIS< RT, QT, PT >::set_error ( const std::vector< int > &  roots,
const std::vector< value_type_abs > &  errors 
)
inlineoverridevirtual

Update errors for a group of roots.

Parameters
rootsgroup of roots
errorserrors corresponding to each root

Implements molpro::linalg::itsolv::subspace::ISubspaceSolver< RT, QT, PT >.

◆ set_error() [2/2]

template<class RT , class QT , class PT >
void molpro::linalg::itsolv::subspace::SubspaceSolverDIIS< RT, QT, PT >::set_error ( int  root,
value_type_abs  error 
)
inlineoverridevirtual

Set error value for solution root

Implements molpro::linalg::itsolv::subspace::ISubspaceSolver< RT, QT, PT >.

◆ set_logger()

template<class RT , class QT , class PT >
void molpro::linalg::itsolv::subspace::SubspaceSolverDIIS< RT, QT, PT >::set_logger ( std::shared_ptr< Logger >  logger)
inlineoverridevirtual

◆ size()

template<class RT , class QT , class PT >
size_t molpro::linalg::itsolv::subspace::SubspaceSolverDIIS< RT, QT, PT >::size ( ) const
inlineoverridevirtual

◆ solutions()

template<class RT , class QT , class PT >
const Matrix< value_type > & molpro::linalg::itsolv::subspace::SubspaceSolverDIIS< RT, QT, PT >::solutions ( ) const
inlineoverridevirtual

Access solutions from the last solve() call.

Implements molpro::linalg::itsolv::subspace::ISubspaceSolver< RT, QT, PT >.

◆ solve()

template<class RT , class QT , class PT >
void molpro::linalg::itsolv::subspace::SubspaceSolverDIIS< RT, QT, PT >::solve ( IXSpace< R, Q, P > &  xspace,
const size_t  nroots_max 
)
inlineoverridevirtual

Solve the subspace problem.

Parameters
xspacedefinition of the subspace
nroots_maxmaximum number of roots to calculate

Implements molpro::linalg::itsolv::subspace::ISubspaceSolver< RT, QT, PT >.

Member Data Documentation

◆ m_errors

template<class RT , class QT , class PT >
std::vector<value_type_abs> molpro::linalg::itsolv::subspace::SubspaceSolverDIIS< RT, QT, PT >::m_errors
protected

errors in subspace solutions

◆ m_logger

template<class RT , class QT , class PT >
std::shared_ptr<Logger> molpro::linalg::itsolv::subspace::SubspaceSolverDIIS< RT, QT, PT >::m_logger {}
protected

◆ m_solutions

solution matrix with row vectors

◆ m_svd_solver_threshold

template<class RT , class QT , class PT >
value_type_abs molpro::linalg::itsolv::subspace::SubspaceSolverDIIS< RT, QT, PT >::m_svd_solver_threshold = precision_scaled<value_type_abs>(1e-14)

threshold to select null space during SVD in eigenproblem, rescaled from double to the working precision