iterative-solver 0.0
CastOptions.h
1#ifndef LINEARALGEBRA_SRC_MOLPRO_LINALG_ITSOLV_CASTOPTIONS_H
2#define LINEARALGEBRA_SRC_MOLPRO_LINALG_ITSOLV_CASTOPTIONS_H
3#include "LinearEigensystemRSPTOptions.h"
4#include <memory>
5#include <molpro/linalg/itsolv/IterativeSolver.h>
6#include <molpro/linalg/itsolv/LinearEigensystemDavidsonOptions.h>
7#include <molpro/linalg/itsolv/LinearEquationsDavidsonOptions.h>
8#include <molpro/linalg/itsolv/NonLinearEquationsDIISOptions.h>
9#include <molpro/linalg/itsolv/OptimizeBFGSOptions.h>
10#include <molpro/linalg/itsolv/OptimizeSDOptions.h>
11#include <stdexcept>
12
13namespace molpro::linalg::itsolv {
16private:
17 template <class OptionsType>
18 static std::shared_ptr<OptionsType> cast(const std::shared_ptr<Options>& options,
19 const std::string& options_type_name) {
20 auto lin_eig_options = std::shared_ptr<OptionsType>{};
21 if (options) {
22 lin_eig_options = std::dynamic_pointer_cast<OptionsType>(options);
23 if (!lin_eig_options)
24 throw std::runtime_error("Failed to cast Options to " + options_type_name);
25 }
26 return lin_eig_options;
27 }
28
29 template <class OptionsType>
30 static const OptionsType& cast(const Options& options, const std::string& options_type_name) {
31 try {
32 return dynamic_cast<const OptionsType&>(options);
33 } catch (std::bad_cast& err) {
34 throw std::runtime_error("Failed to cast Options to " + options_type_name);
35 }
36 }
37
38public:
39 static std::shared_ptr<LinearEigensystemDavidsonOptions> LinearEigensystem(const std::shared_ptr<Options>& options) {
40 return cast<LinearEigensystemDavidsonOptions>(options, "LinearEigensystemOptions");
41 }
43 return cast<LinearEigensystemDavidsonOptions>(options, "LinearEigensystemOptions");
44 }
46 return cast<LinearEigensystemRSPTOptions>(options, "LinearEigensystemRSPTOptions");
47 }
49 // const auto& opt = const_cast<const Options&>(options);
50 return const_cast<LinearEigensystemDavidsonOptions&>(
51 cast<LinearEigensystemDavidsonOptions>(options, "LinearEigensystemOptions"));
52 }
53
54 static std::shared_ptr<LinearEquationsDavidsonOptions> LinearEquations(const std::shared_ptr<Options>& options) {
55 return cast<LinearEquationsDavidsonOptions>(options, "LinearEquationsOptions");
56 }
58 return cast<LinearEquationsDavidsonOptions>(options, "LinearEquationsOptions");
59 }
61 // const auto& opt = const_cast<const Options&>(options);
62 return const_cast<LinearEquationsDavidsonOptions&>(
63 cast<LinearEquationsDavidsonOptions>(options, "LinearEquationsOptions"));
64 }
65
66 static std::shared_ptr<NonLinearEquationsDIISOptions>
67 NonLinearEquationsDIIS(const std::shared_ptr<Options>& options) {
68 return cast<NonLinearEquationsDIISOptions>(options, "NonLinearEquationsDIISOptions");
69 }
71 return cast<NonLinearEquationsDIISOptions>(options, "NonLinearEquationsDIISOptions");
72 }
74 // const auto& opt = const_cast<const Options&>(options);
75 return const_cast<NonLinearEquationsDIISOptions&>(
76 cast<NonLinearEquationsDIISOptions>(options, "NonLinearEquationsDIISOptions"));
77 }
78
79 static std::shared_ptr<OptimizeBFGSOptions> OptimizeBFGS(const std::shared_ptr<Options>& options) {
80 return cast<OptimizeBFGSOptions>(options, "OptimizeBFGSOptions");
81 }
83 return cast<OptimizeBFGSOptions>(options, "OptimizeBFGSOptions");
84 }
86 // const auto& opt = const_cast<const Options&>(options);
87 return const_cast<OptimizeBFGSOptions&>(cast<OptimizeBFGSOptions>(options, "OptimizeBFGSOptions"));
88 }
89
90 static std::shared_ptr<OptimizeSDOptions> OptimizeSD(const std::shared_ptr<Options>& options) {
91 return cast<OptimizeSDOptions>(options, "OptimizeSDOptions");
92 }
94 return cast<OptimizeSDOptions>(options, "OptimizeSDOptions");
95 }
97 // const auto& opt = const_cast<const Options&>(options);
98 return const_cast<OptimizeSDOptions&>(cast<OptimizeSDOptions>(options, "OptimizeSDOptions"));
99 }
100};
101} // namespace molpro::linalg::itsolv
102
103#endif // LINEARALGEBRA_SRC_MOLPRO_LINALG_ITSOLV_CASTOPTIONS_H
4-parameter interpolation of a 1-dimensional function given two points for which function values and ...
Definition: helper.h:10
const std::shared_ptr< const molpro::Options > options()
Get the Options object associated with iterative-solver.
Definition: options.cpp:4
Safely down-cast Options to one of the implementations.
Definition: CastOptions.h:15
static const OptimizeBFGSOptions & OptimizeBFGS(const Options &options)
Definition: CastOptions.h:82
static const NonLinearEquationsDIISOptions & NonLinearEquationsDIIS(const Options &options)
Definition: CastOptions.h:70
static OptimizeSDOptions & OptimizeSD(Options &options)
Definition: CastOptions.h:96
static LinearEigensystemDavidsonOptions & LinearEigensystem(Options &options)
Definition: CastOptions.h:48
static std::shared_ptr< LinearEigensystemDavidsonOptions > LinearEigensystem(const std::shared_ptr< Options > &options)
Definition: CastOptions.h:39
static OptimizeBFGSOptions & OptimizeBFGS(Options &options)
Definition: CastOptions.h:85
static std::shared_ptr< NonLinearEquationsDIISOptions > NonLinearEquationsDIIS(const std::shared_ptr< Options > &options)
Definition: CastOptions.h:67
static const LinearEigensystemRSPTOptions & LinearEigensystemRSPT(const Options &options)
Definition: CastOptions.h:45
static const LinearEigensystemDavidsonOptions & LinearEigensystem(const Options &options)
Definition: CastOptions.h:42
static NonLinearEquationsDIISOptions & NonLinearEquationsDIIS(Options &options)
Definition: CastOptions.h:73
static std::shared_ptr< OptimizeBFGSOptions > OptimizeBFGS(const std::shared_ptr< Options > &options)
Definition: CastOptions.h:79
static LinearEquationsDavidsonOptions & LinearEquations(Options &options)
Definition: CastOptions.h:60
static const OptimizeSDOptions & OptimizeSD(const Options &options)
Definition: CastOptions.h:93
static std::shared_ptr< OptimizeSDOptions > OptimizeSD(const std::shared_ptr< Options > &options)
Definition: CastOptions.h:90
static const LinearEquationsDavidsonOptions & LinearEquations(const Options &options)
Definition: CastOptions.h:57
static std::shared_ptr< LinearEquationsDavidsonOptions > LinearEquations(const std::shared_ptr< Options > &options)
Definition: CastOptions.h:54
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