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
10
12template <class RT, class QT, class PT>
13class IXSpace {
14public:
15 using R = RT;
16 using Q = QT;
17 using P = PT;
20 IXSpace() = default;
21 virtual ~IXSpace() = default;
23
25 size_t size() const { return dimensions().nX; }
26
28 virtual void erase(size_t i) = 0;
30 virtual void eraseq(size_t i) = 0;
32 virtual void erasep(size_t i) = 0;
34 virtual void erased(size_t i) = 0;
35
37 virtual void update_pspace(const CVecRef<P>& params, const array::Span<value_type>& pp_action_matrix) = 0;
38
40 virtual void update_qspace(const CVecRef<R>& params, const CVecRef<R>& actions) = 0;
41
43 virtual void update_dspace(VecRef<Q>& params, VecRef<Q>& actions) = 0;
44
45 virtual VecRef<P> paramsp() = 0;
46 virtual VecRef<Q> paramsq() = 0;
47 virtual VecRef<Q> actionsq() = 0;
48 virtual VecRef<Q> paramsd() = 0;
49 virtual VecRef<Q> actionsd() = 0;
50
51 virtual CVecRef<P> paramsp() const = 0;
52 virtual CVecRef<Q> paramsq() const = 0;
53 virtual CVecRef<Q> actionsq() const = 0;
54 virtual CVecRef<Q> paramsd() const = 0;
55 virtual CVecRef<Q> actionsd() const = 0;
56
57 virtual CVecRef<P> cparamsp() const = 0;
58 virtual CVecRef<Q> cparamsq() const = 0;
59 virtual CVecRef<Q> cactionsq() const = 0;
60 virtual CVecRef<Q> cparamsd() const = 0;
61 virtual CVecRef<Q> cactionsd() const = 0;
62
63 virtual const Dimensions& dimensions() const = 0;
64};
65
66} // namespace molpro::linalg::itsolv::subspace
67
68#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:28
Full subspace.
Definition: IXSpace.h:13
virtual CVecRef< Q > cparamsq() const =0
virtual CVecRef< P > paramsp() const =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:25
virtual CVecRef< Q > cactionsd() const =0
SubspaceData data
Equation data in the subspace.
Definition: IXSpace.h:22
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:19
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:18
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.
Definition: PSpace.h:7
std::map< EqnData, Matrix< double > > SubspaceData
Definition: SubspaceData.h:9
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:5
size_t nX
Definition: Dimensions.h:11