1#ifndef LINEARALGEBRA_SRC_MOLPRO_LINALG_ITSOLV_SOLVERFACTORY_H
2#define LINEARALGEBRA_SRC_MOLPRO_LINALG_ITSOLV_SOLVERFACTORY_H
5#include "LinearEigensystemDavidsonOptions.h"
6#include "LinearEigensystemRSPTOptions.h"
7#include "LinearEquationsDavidsonOptions.h"
8#include "OptimizeBFGSOptions.h"
9#include "OptimizeSDOptions.h"
11#include <molpro/linalg/itsolv/ArrayHandlers.h>
12#include <molpro/linalg/itsolv/IterativeSolver.h>
13#include <molpro/linalg/itsolv/NonLinearEquationsDIISOptions.h>
14#include <molpro/linalg/itsolv/options_map.h>
73template <
class R,
class Q = R,
class P = std::map<
size_t,
typename R::value_type>>
80 virtual std::unique_ptr<LinearEigensystem<R, Q, P>>
85 virtual std::unique_ptr<LinearEquations<R, Q, P>>
89 virtual std::unique_ptr<NonLinearEquations<R, Q, P>>
91 const std::shared_ptr<ArrayHandlers<R, Q, P>>&
handlers =
92 std::make_shared<molpro::linalg::itsolv::ArrayHandlers<R, Q, P>>());
94 virtual std::unique_ptr<Optimize<R, Q, P>>
96 const std::shared_ptr<ArrayHandlers<R, Q, P>>&
handlers =
97 std::make_shared<molpro::linalg::itsolv::ArrayHandlers<R, Q, P>>());
102 virtual std::unique_ptr<IterativeSolver<R, Q, P>>
109template <
class R,
class Q = R,
class P = std::map<
size_t,
typename R::value_type>>
110std::unique_ptr<LinearEigensystem<R, Q, P>>
117template <
class R,
class Q = R,
class P = std::map<
size_t,
typename R::value_type>>
118std::unique_ptr<LinearEigensystem<R, Q, P>>
127 throw std::runtime_error(
"Unimplemented method " +
method);
130template <
class R,
class Q = R,
class P = std::map<
size_t,
typename R::value_type>>
131std::unique_ptr<LinearEquations<R, Q, P>>
138template <
class R,
class Q = R,
class P = std::map<
size_t,
typename R::value_type>>
139std::unique_ptr<LinearEquations<R, Q, P>>
146 throw std::runtime_error(
"Unimplemented method " +
method);
149template <
class R,
class Q = R,
class P = std::map<
size_t,
typename R::value_type>>
150std::tuple<bool, std::unique_ptr<LinearEquations<R, Q, P>>>
153 const std::string&
options =
"",
157 solver->set_verbosity(verbosity);
161 return std::make_tuple<bool, std::unique_ptr<LinearEquations<R, Q, P>>>(std::move(
success), std::move(solver));
164template <
class R,
class Q = R,
class P = std::map<
size_t,
typename R::value_type>>
165std::tuple<bool, std::unique_ptr<LinearEquations<R, Q, P>>>
168 const std::string&
options =
"",
175template <
class R,
class Q = R,
class P = std::map<
size_t,
typename R::value_type>>
178 const std::string&
options =
"",
182 std::vector<std::reference_wrapper<R>>{std::ref(actions)}, problem, verbosity,
186template <
class R,
class Q = R,
class P = std::map<
size_t,
typename R::value_type>>
187std::unique_ptr<NonLinearEquations<R, Q, P>>
189 const std::shared_ptr<ArrayHandlers<R, Q, P>>&
handlers =
190 std::make_shared<molpro::linalg::itsolv::ArrayHandlers<R, Q, P>>()) {
194template <
class R,
class Q = R,
class P = std::map<
size_t,
typename R::value_type>>
195std::unique_ptr<NonLinearEquations<R, Q, P>>
202 throw std::runtime_error(
"Unimplemented method " +
method);
205template <
class R,
class Q = R,
class P = std::map<
size_t,
typename R::value_type>>
206std::unique_ptr<Optimize<R, Q, P>>
208 const std::shared_ptr<ArrayHandlers<R, Q, P>>&
handlers =
209 std::make_shared<molpro::linalg::itsolv::ArrayHandlers<R, Q, P>>()) {
213template <
class R,
class Q = R,
class P = std::map<
size_t,
typename R::value_type>>
214std::unique_ptr<Optimize<R, Q, P>>
223 throw std::runtime_error(
"Unimplemented method " +
method);
Class, containing a collection of array handlers used in IterativeSolver Provides a Builder sub-class...
Definition ArrayHandlers.h:25
Abstract class defining the problem-specific interface for the simplified solver interface to Iterati...
Definition IterativeSolver.h:85
Factory for creating instances of specific solver implementations from the corresponding Options obje...
Definition SolverFactory.h:74
virtual std::unique_ptr< IterativeSolver< R, Q, P > > create(const Options &options, const std::shared_ptr< ArrayHandlers< R, Q, P > > &handlers)
Definition SolverFactory-implementation.h:19
virtual ~SolverFactory()=default
static std::map< std::string, std::string > parse_keyval_string(std::string s)
Definition util.cpp:38
4-parameter interpolation of a 1-dimensional function given two points for which function values and ...
Definition helper.h:14
std::tuple< bool, std::unique_ptr< LinearEquations< R, Q, P > > > Solve_LinearEquations(const VecRef< R > ¶meters, const VecRef< R > &actions, const Problem< R > &problem, int verbosity=0, bool generate_initial_guess=true, const std::string &method="Davidson", const std::string &options="", const std::shared_ptr< ArrayHandlers< R, Q, P > > &handlers=std::make_shared< molpro::linalg::itsolv::ArrayHandlers< R, Q, P > >())
Definition SolverFactory.h:151
std::unique_ptr< LinearEigensystem< R, Q, P > > create_LinearEigensystem(const LinearEigensystemOptions &options, const std::shared_ptr< ArrayHandlers< R, Q, P > > &handlers=std::make_shared< molpro::linalg::itsolv::ArrayHandlers< R, Q, P > >())
Definition SolverFactory.h:111
std::map< std::string, std::string > options_map
Definition options_map.h:8
auto wrap(ForwardIt begin, ForwardIt end)
Takes a begin and end iterators and returns a vector of references to each element.
Definition wrap.h:32
std::unique_ptr< NonLinearEquations< R, Q, P > > create_NonLinearEquations(const NonLinearEquationsOptions &options=NonLinearEquationsOptions{}, const std::shared_ptr< ArrayHandlers< R, Q, P > > &handlers=std::make_shared< molpro::linalg::itsolv::ArrayHandlers< R, Q, P > >())
Definition SolverFactory.h:188
std::unique_ptr< Optimize< R, Q, P > > create_Optimize(const OptimizeOptions &options=OptimizeOptions{}, const std::shared_ptr< ArrayHandlers< R, Q, P > > &handlers=std::make_shared< molpro::linalg::itsolv::ArrayHandlers< R, Q, P > >())
Definition SolverFactory.h:207
std::vector< std::reference_wrapper< A > > VecRef
Definition wrap.h:11
std::unique_ptr< LinearEquations< R, Q, P > > create_LinearEquations(const LinearEquationsOptions &options, const std::shared_ptr< ArrayHandlers< R, Q, P > > &handlers=std::make_shared< molpro::linalg::itsolv::ArrayHandlers< R, Q, P > >())
Definition SolverFactory.h:132
const std::shared_ptr< const molpro::Options > options()
Get the Options object associated with iterative-solver.
Definition linalg_options.cpp:4
Allows setting and getting of options for LinearEigensystemDavidson instance via IterativeSolver base...
Definition LinearEigensystemDavidsonOptions.h:38
Allows setting and getting of options for LinearEigensystemRSPT instance via IterativeSolver base cla...
Definition LinearEigensystemRSPTOptions.h:9
Allows setting and getting of options for LinearEquationsDavidson instance via IterativeSolver base c...
Definition LinearEquationsDavidsonOptions.h:13
Allows setting and getting of options for NonLinearEquationsDIIS instance via IterativeSolver base cl...
Definition NonLinearEquationsDIISOptions.h:9
Allows setting and getting of options for OptimizeBFGS instance via IterativeSolver base class.
Definition OptimizeBFGSOptions.h:9
Allows setting and getting of options for OptimizeBFGS instance via IterativeSolver base class.
Definition OptimizeSDOptions.h:9
Access point for different options in iterative solvers.
Definition Options.h:20