iterative-solver 0.0
IXSpace.h
1#ifndef LINEARALGEBRA_SRC_MOLPRO_LINALG_ITSOLV_SUBSPACE_IXSPACE_H
2#define LINEARALGEBRA_SRC_MOLPRO_LINALG_ITSOLV_SUBSPACE_IXSPACE_H
3#include <molpro/linalg/array/ArrayHandler.h>
4#include <molpro/linalg/array/Span.h>
5#include <molpro/linalg/itsolv/subspace/Dimensions.h>
6#include <molpro/linalg/itsolv/subspace/SubspaceData.h>
7#include <molpro/linalg/itsolv/wrap.h>
8
9#include <memory>
10
11namespace molpro::linalg::itsolv {
12
13class Logger;
14
15namespace subspace {
16
18template <class RT, class QT, class PT>
19class IXSpace {
20public:
21 using R = RT;
22 using Q = QT;
23 using P = PT;
26 IXSpace() = default;
27 virtual ~IXSpace() = default;
29
31 size_t size() const { return dimensions().nX; }
32
34 virtual void erase(size_t i) = 0;
36 virtual void eraseq(size_t i) = 0;
38 virtual void erasep(size_t i) = 0;
40 virtual void erased(size_t i) = 0;
41
43 virtual void update_pspace(const CVecRef<P>& params, const array::Span<value_type>& pp_action_matrix) = 0;
44
46 virtual void update_qspace(const CVecRef<R>& params, const CVecRef<R>& actions) = 0;
47
49 virtual void update_dspace(VecRef<Q>& params, VecRef<Q>& actions) = 0;
50
51 virtual VecRef<P> paramsp() = 0;
52 virtual VecRef<Q> paramsq() = 0;
53 virtual VecRef<Q> actionsq() = 0;
54 virtual VecRef<Q> paramsd() = 0;
55 virtual VecRef<Q> actionsd() = 0;
56
57 virtual CVecRef<P> paramsp() const = 0;
58 virtual CVecRef<Q> paramsq() const = 0;
59 virtual CVecRef<Q> actionsq() const = 0;
60 virtual CVecRef<Q> paramsd() const = 0;
61 virtual CVecRef<Q> actionsd() const = 0;
62
63 virtual CVecRef<P> cparamsp() const = 0;
64 virtual CVecRef<Q> cparamsq() const = 0;
65 virtual CVecRef<Q> cactionsq() const = 0;
66 virtual CVecRef<Q> cparamsd() const = 0;
67 virtual CVecRef<Q> cactionsd() const = 0;
68
69 virtual const Dimensions& dimensions() const = 0;
70
71 virtual void set_logger(std::shared_ptr<Logger> logger) = 0;
72};
73
74} // namespace subspace
75} // namespace molpro::linalg::itsolv
76
77#endif // LINEARALGEBRA_SRC_MOLPRO_LINALG_ITSOLV_SUBSPACE_IXSPACE_H
decltype(value_type_L{} *value_type_R{}) value_type
Definition: ArrayHandler.h:181
decltype(check_abs< value_type >()) value_type_abs
Definition: ArrayHandler.h:182
Non-owning container taking a pointer to the data buffer and its size and exposing routines for itera...
Definition: Span.h:31
Full subspace.
Definition: IXSpace.h:19
virtual CVecRef< Q > cparamsq() const =0
virtual CVecRef< P > paramsp() const =0
virtual void set_logger(std::shared_ptr< Logger > logger)=0
virtual CVecRef< P > cparamsp() const =0
virtual void erased(size_t i)=0
Removes parameter i from D subspace.
virtual CVecRef< Q > paramsq() const =0
size_t size() const
Number of vectors forming the subspace.
Definition: IXSpace.h:31
virtual CVecRef< Q > cactionsd() const =0
SubspaceData data
Equation data in the subspace.
Definition: IXSpace.h:28
virtual void erasep(size_t i)=0
Removes parameter i from P subspace.
virtual void eraseq(size_t i)=0
Removes parameter i from Q subspace.
typename array::ArrayHandler< R, R >::value_type_abs value_type_abs
Definition: IXSpace.h:25
virtual CVecRef< Q > paramsd() const =0
virtual CVecRef< Q > cactionsq() const =0
virtual void update_pspace(const CVecRef< P > &params, const array::Span< value_type > &pp_action_matrix)=0
Adds parameters to the P space.
virtual CVecRef< Q > cparamsd() const =0
typename array::ArrayHandler< R, R >::value_type value_type
Definition: IXSpace.h:24
virtual CVecRef< Q > actionsd() const =0
virtual const Dimensions & dimensions() const =0
virtual CVecRef< Q > actionsq() const =0
virtual void erase(size_t i)=0
Removes parameter i from the full subspace.
virtual void update_qspace(const CVecRef< R > &params, const CVecRef< R > &actions)=0
Adds parameters to the Q space.
virtual void update_dspace(VecRef< Q > &params, VecRef< Q > &actions)=0
Updates D space with the new parameters.
std::map< EqnData, Matrix< double > > SubspaceData
Definition: SubspaceData.h:9
4-parameter interpolation of a 1-dimensional function given two points for which function values and ...
Definition: helper.h:11
std::vector< std::reference_wrapper< const A > > CVecRef
Definition: wrap.h:14
std::vector< std::reference_wrapper< A > > VecRef
Definition: wrap.h:11
Stores partitioning of XSpace into P, Q and R blocks with sizes and offsets for each one.
Definition: Dimensions.h:8
size_t nX
Definition: Dimensions.h:14