1#ifndef LINEARALGEBRA_SRC_MOLPRO_LINALG_ITSOLV_SOLVERFACTORY_IMPLEMENTATION_H
2#define LINEARALGEBRA_SRC_MOLPRO_LINALG_ITSOLV_SOLVERFACTORY_IMPLEMENTATION_H
4#include "OptimizeSDOptions.h"
5#include <molpro/linalg/itsolv/LinearEigensystemDavidson.h>
6#include <molpro/linalg/itsolv/LinearEigensystemRSPT.h>
7#include <molpro/linalg/itsolv/LinearEquationsDavidson.h>
8#include <molpro/linalg/itsolv/NonLinearEquationsDIIS.h>
9#include <molpro/linalg/itsolv/OptimizeBFGS.h>
10#include <molpro/linalg/itsolv/SolverFactory.h>
11#include <molpro/linalg/itsolv/subspace/SubspaceSolverDIIS.h>
12#include <molpro/linalg/itsolv/subspace/SubspaceSolverOptBFGS.h>
13#include <molpro/linalg/itsolv/subspace/SubspaceSolverOptSD.h>
17template <
class R,
class Q,
class P>
18std::unique_ptr<IterativeSolver<R, Q, P>>
22 return create(*options_child, handlers);
24 return create(*options_child, handlers);
30template <
class R,
class Q,
class P>
31std::unique_ptr<LinearEigensystem<R, Q, P>>
36 auto solver = std::make_unique<LinearEigensystemDavidson<R, Q, P>>(handlers);
41 auto solver = std::make_unique<LinearEigensystemRSPT<R, Q, P>>(handlers);
45 throw std::logic_error(
"SolverFactory failed to cast to solver");
48template <
class R,
class Q,
class P>
49std::unique_ptr<LinearEquations<R, Q, P>>
52 auto solver = std::make_unique<LinearEquationsDavidson<R, Q, P>>(handlers);
57template <
class R,
class Q,
class P>
58std::unique_ptr<NonLinearEquations<R, Q, P>>
63 auto solver = std::make_unique<NonLinearEquationsDIIS<R, Q, P>>(handlers);
67 throw std::runtime_error(
"Unimplemented solver method");
70template <
class R,
class Q,
class P>
71std::unique_ptr<Optimize<R, Q, P>>
76 auto solver = std::make_unique<OptimizeBFGS<R, Q, P>>(handlers);
80 if (
auto options_child =
dynamic_cast<OptimizeSDOptions*
>(options_ptr); options_child) {
81 auto solver = std::make_unique<OptimizeSD<R, Q, P>>(handlers);
85 throw std::runtime_error(
"Unimplemented solver method");
88template <
class R,
class Q,
class P>
89std::unique_ptr<IterativeSolver<R, Q, P>>
92 if (method ==
"LinearEigensystem") {
94 }
else if (method ==
"LinearEquations") {
97 throw std::runtime_error(
"Method = " + method +
", is not implemented");
Class, containing a collection of array handlers used in IterativeSolver Provides a Builder sub-class...
Definition: ArrayHandlers.h:25
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
4-parameter interpolation of a 1-dimensional function given two points for which function values and ...
Definition: helper.h:10
std::map< std::string, std::string > options_map
Definition: options_map.h:8
const std::shared_ptr< const molpro::Options > options()
Get the Options object associated with iterative-solver.
Definition: options.cpp:4
Allows setting and getting of options for LinearEigensystemDavidson instance via IterativeSolver base...
Definition: LinearEigensystemDavidsonOptions.h:36
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:8
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