Namespaces | |
namespace | dspace |
Classes | |
class | DSpaceResetter |
Resets D space constructing full solutions as the new working set, removing instabilities from Q space, and clearing D space. More... | |
Functions | |
std::vector< std::pair< size_t, size_t > > | parameter_batches (const size_t nsol, const size_t nparam) |
template<class R , class Q , class P > | |
void | construct_solution (const VecRef< R > ¶ms, const std::vector< int > &roots, const subspace::Matrix< double > &solutions, const std::vector< std::reference_wrapper< P > > &pparams, const std::vector< std::reference_wrapper< Q > > &qparams, const std::vector< std::reference_wrapper< Q > > &dparams, size_t oP, size_t oQ, size_t oD, ArrayHandlers< R, Q, P > &handlers) |
template<typename T > | |
std::vector< std::vector< T > > | construct_vectorP (const std::vector< int > &roots, const subspace::Matrix< T > &solutions, const size_t oP, const size_t nP) |
template<class R > | |
void | normalise (const size_t n_roots, const VecRef< R > ¶ms, const VecRef< R > &actions, array::ArrayHandler< R, R > &handler, Logger &logger) |
template<class R , typename T > | |
void | update_errors (std::vector< T > &errors, const CVecRef< R > &residual, array::ArrayHandler< R, R > &handler) |
template<typename T > | |
std::vector< int > | select_working_set (const size_t nw, const std::vector< T > &errors, const T threshold, const std::vector< T > &value_errors, const T value_threshold) |
template<class R > | |
void | normalise (VecRef< R > ¶ms, array::ArrayHandler< R, R > &handler, Logger &logger, double thresh=1.0e-14) |
template<class R , class Q , class P , typename value_type > | |
auto | append_overlap_with_r (const subspace::Matrix< value_type > &overlap, const CVecRef< R > ¶ms, const CVecRef< P > &pparams, const CVecRef< Q > &qparams, const CVecRef< Q > &dparams, ArrayHandlers< R, Q, P > &handlers, Logger &logger) |
Constructs overlap of the full subspace by appending overlap with new parameters to the overlap of previous subspace. More... | |
template<typename value_type > | |
auto | limit_qspace_size (const subspace::Dimensions &dims, const size_t max_size_qspace, const subspace::Matrix< value_type > &solutions, Logger &logger) |
Ensures that size Q space is within limit by proposing Q parameters for deletion. More... | |
template<class R , class Q , class P , typename value_type , typename value_type_abs > | |
auto | construct_dspace (const subspace::Matrix< value_type > &solutions, const subspace::IXSpace< R, Q, P > &xspace, const std::vector< int > &q_delete, const value_type_abs norm_thresh, const value_type_abs svd_thresh, array::ArrayHandler< Q, Q > &handler, Logger &logger) |
Constructs the new D space by projecting the solutions onto Qd+D subspace and ensuring they are well conditioned. More... | |
template<class R , class Q , class P , typename value_type , typename value_type_abs > | |
auto | modified_gram_schmidt (const VecRef< R > &rparams, const subspace::Matrix< value_type > &overlap, const subspace::Dimensions &dims, const CVecRef< P > &pparams, const CVecRef< Q > &qparams, const CVecRef< Q > &dparams, const value_type_abs norm_thresh, ArrayHandlers< R, Q, P > &handlers, Logger &logger) |
Orthogonalises R parameters against P+Q+D subspace (and themselves) More... | |
template<typename value_type , typename value_type_abs > | |
auto | redundant_parameters (const subspace::Matrix< value_type > &overlap, const size_t oR, const size_t nR, const value_type_abs svd_thresh, Logger &logger) |
Deduces a set of parameters that are redundant due to linear dependencies. More... | |
template<class R > | |
auto | get_new_working_set (const std::vector< int > &working_set, const CVecRef< R > ¶ms, const CVecRef< R > &wparams) |
Returns new working set based on parameters included in wparams. More... | |
template<class R , class Q , class P , typename value_type_abs > | |
auto | propose_rspace (IterativeSolver< R, Q, P > &solver, const VecRef< R > ¶meters, const VecRef< R > &residuals, subspace::IXSpace< R, Q, P > &xspace, subspace::ISubspaceSolver< R, Q, P > &subspace_solver, ArrayHandlers< R, Q, P > &handlers, Logger &logger, value_type_abs svd_thresh, value_type_abs res_norm_thresh, int max_size_qspace, molpro::profiler::Profiler &profiler) |
Proposes new parameters for the subspace from the preconditioned residuals. More... | |
template<class R , class Q , class P , typename value_type > | |
void | resize_qspace (subspace::IXSpace< R, Q, P > &xspace, const subspace::Matrix< value_type > &solutions, int m_max_Qsize_after_reset, Logger &logger) |
Removes Q parameters that have smallest contribution to any solution until Q space size is within limit. More... | |
template<class R , class Q > | |
auto | max_overlap_with_R (const CVecRef< R > &rparams, const CVecRef< Q > &qparams, array::ArrayHandler< R, Q > &handler, Logger &logger) |
Returns list of Q indices with maximum overlap to R parameters, sorted in descending order. More... | |
auto molpro::linalg::itsolv::detail::append_overlap_with_r | ( | const subspace::Matrix< value_type > & | overlap, |
const CVecRef< R > & | params, | ||
const CVecRef< P > & | pparams, | ||
const CVecRef< Q > & | qparams, | ||
const CVecRef< Q > & | dparams, | ||
ArrayHandlers< R, Q, P > & | handlers, | ||
Logger & | logger | ||
) |
Constructs overlap of the full subspace by appending overlap with new parameters to the overlap of previous subspace.
ov | overlap of P+Q+D |
params | new parameters |
pparams | P space parameters |
qparams | Q space parameters |
dparams | D space parameters |
handlers | array handlers |
logger | logger |
auto molpro::linalg::itsolv::detail::construct_dspace | ( | const subspace::Matrix< value_type > & | solutions, |
const subspace::IXSpace< R, Q, P > & | xspace, | ||
const std::vector< int > & | q_delete, | ||
const value_type_abs | norm_thresh, | ||
const value_type_abs | svd_thresh, | ||
array::ArrayHandler< Q, Q > & | handler, | ||
Logger & | logger | ||
) |
Constructs the new D space by projecting the solutions onto Qd+D subspace and ensuring they are well conditioned.
xspace | X space container |
q_delete | Q parameters marked for deletion |
norm_thresh | norm threshold for parameters to be considered null |
svd_thresh | svd threshold for marking the null space |
handler | array handler |
logger | logger |
void molpro::linalg::itsolv::detail::construct_solution | ( | const VecRef< R > & | params, |
const std::vector< int > & | roots, | ||
const subspace::Matrix< double > & | solutions, | ||
const std::vector< std::reference_wrapper< P > > & | pparams, | ||
const std::vector< std::reference_wrapper< Q > > & | qparams, | ||
const std::vector< std::reference_wrapper< Q > > & | dparams, | ||
size_t | oP, | ||
size_t | oQ, | ||
size_t | oD, | ||
ArrayHandlers< R, Q, P > & | handlers | ||
) |
std::vector< std::vector< T > > molpro::linalg::itsolv::detail::construct_vectorP | ( | const std::vector< int > & | roots, |
const subspace::Matrix< T > & | solutions, | ||
const size_t | oP, | ||
const size_t | nP | ||
) |
auto molpro::linalg::itsolv::detail::get_new_working_set | ( | const std::vector< int > & | working_set, |
const CVecRef< R > & | params, | ||
const CVecRef< R > & | wparams | ||
) |
Returns new working set based on parameters included in wparams.
auto molpro::linalg::itsolv::detail::limit_qspace_size | ( | const subspace::Dimensions & | dims, |
const size_t | max_size_qspace, | ||
const subspace::Matrix< value_type > & | solutions, | ||
Logger & | logger | ||
) |
Ensures that size Q space is within limit by proposing Q parameters for deletion.
dims | dimensions of current P+Q+D subspace |
max_size_qspace | maximum size of Q space |
solutions | solutions matrix |
logger | logger |
auto molpro::linalg::itsolv::detail::max_overlap_with_R | ( | const CVecRef< R > & | rparams, |
const CVecRef< Q > & | qparams, | ||
array::ArrayHandler< R, Q > & | handler, | ||
Logger & | logger | ||
) |
Returns list of Q indices with maximum overlap to R parameters, sorted in descending order.
rparams | R parameters |
qparams | Q parameters to calculate maximum overlap of with R |
handler | array handler |
logger | logger |
auto molpro::linalg::itsolv::detail::modified_gram_schmidt | ( | const VecRef< R > & | rparams, |
const subspace::Matrix< value_type > & | overlap, | ||
const subspace::Dimensions & | dims, | ||
const CVecRef< P > & | pparams, | ||
const CVecRef< Q > & | qparams, | ||
const CVecRef< Q > & | dparams, | ||
const value_type_abs | norm_thresh, | ||
ArrayHandlers< R, Q, P > & | handlers, | ||
Logger & | logger | ||
) |
Orthogonalises R parameters against P+Q+D subspace (and themselves)
New vectors with norm less than threshold are considered null and are not normalised. Their indices in params are returned.
rparams | R space parameters |
overlap | overlap of P+Q+D subspace |
dims | dimensions of P+Q+D subspace |
pparams | P space parameters |
qparams | Q space parameters |
dparams | D space parameters |
handlers | array handlers |
norm_thresh | parameters with norm less than threshold are considered null and won't be orthogonalised against |
void molpro::linalg::itsolv::detail::normalise | ( | const size_t | n_roots, |
const VecRef< R > & | params, | ||
const VecRef< R > & | actions, | ||
array::ArrayHandler< R, R > & | handler, | ||
Logger & | logger | ||
) |
void molpro::linalg::itsolv::detail::normalise | ( | VecRef< R > & | params, |
array::ArrayHandler< R, R > & | handler, | ||
Logger & | logger, | ||
double | thresh = 1.0e-14 |
||
) |
|
inline |
auto molpro::linalg::itsolv::detail::propose_rspace | ( | IterativeSolver< R, Q, P > & | solver, |
const VecRef< R > & | parameters, | ||
const VecRef< R > & | residuals, | ||
subspace::IXSpace< R, Q, P > & | xspace, | ||
subspace::ISubspaceSolver< R, Q, P > & | subspace_solver, | ||
ArrayHandlers< R, Q, P > & | handlers, | ||
Logger & | logger, | ||
value_type_abs | svd_thresh, | ||
value_type_abs | res_norm_thresh, | ||
int | max_size_qspace, | ||
molpro::profiler::Profiler & | profiler | ||
) |
Proposes new parameters for the subspace from the preconditioned residuals.
Basic procedure:
Various possibilities:
Case 1 is handled at the start by normalising residuals and orthogonalising them among themselves. If it results in vectors with norm less then threshold than they are discarded and their action does not need to be evaluated.
Case 2 is handled during Gram-Schmidt procedure. Residuals are orthogonalised against the old Q space, if one of them has a small norm than an old q vector with largest overlap is deleted.
parameters | output new parameters for the subspace. |
residual | preconditioned residuals. |
auto molpro::linalg::itsolv::detail::redundant_parameters | ( | const subspace::Matrix< value_type > & | overlap, |
const size_t | oR, | ||
const size_t | nR, | ||
const value_type_abs | svd_thresh, | ||
Logger & | logger | ||
) |
Deduces a set of parameters that are redundant due to linear dependencies.
Only the last nR parameters are considered for removal. Linea dependencies are discovered by performing SVD of the overlap matrix.
overlap | overlap matrix of the full subspace |
oR | offset to the start of parameter block |
nR | number of parameters to consider for removal |
svd_thresh | singular value threshold for choosing the null space |
logger | logger |
void molpro::linalg::itsolv::detail::resize_qspace | ( | subspace::IXSpace< R, Q, P > & | xspace, |
const subspace::Matrix< value_type > & | solutions, | ||
int | m_max_Qsize_after_reset, | ||
Logger & | logger | ||
) |
Removes Q parameters that have smallest contribution to any solution until Q space size is within limit.
std::vector< int > molpro::linalg::itsolv::detail::select_working_set | ( | const size_t | nw, |
const std::vector< T > & | errors, | ||
const T | threshold, | ||
const std::vector< T > & | value_errors, | ||
const T | value_threshold | ||
) |
void molpro::linalg::itsolv::detail::update_errors | ( | std::vector< T > & | errors, |
const CVecRef< R > & | residual, | ||
array::ArrayHandler< R, R > & | handler | ||
) |