pairinteraction
A Rydberg Interaction Calculator
TransformationBuilderInterface.hpp
Go to the documentation of this file.
1// SPDX-FileCopyrightText: 2024 Pairinteraction Developers
2// SPDX-License-Identifier: LGPL-3.0-or-later
3
4#pragma once
5
8
9#include <Eigen/SparseCore>
10#include <array>
11#include <complex>
12#include <initializer_list>
13#include <set>
14#include <vector>
15
16namespace pairinteraction {
17enum class TransformationType : unsigned char;
18
19template <typename Scalar>
21 Transformation() = default;
22 Transformation(Eigen::SparseMatrix<Scalar, Eigen::RowMajor> matrix,
23 std::vector<TransformationType> transformation_type);
24 Transformation(Eigen::SparseMatrix<Scalar, Eigen::RowMajor> matrix);
25 Eigen::SparseMatrix<Scalar, Eigen::RowMajor> matrix;
26 std::vector<TransformationType> transformation_type;
27};
28
29struct Sorting {
30 Sorting() = default;
31 Sorting(Eigen::PermutationMatrix<Eigen::Dynamic, Eigen::Dynamic> matrix,
32 std::vector<TransformationType> transformation_type);
33 Sorting(Eigen::PermutationMatrix<Eigen::Dynamic, Eigen::Dynamic> matrix);
34 Eigen::PermutationMatrix<Eigen::Dynamic, Eigen::Dynamic> matrix;
35 std::vector<TransformationType> transformation_type;
36};
37
39 IndicesOfBlock(size_t start, size_t end);
40 size_t size() const;
41 size_t start;
42 size_t end;
43};
44
46public:
47 IndicesOfBlocksCreator(std::initializer_list<size_t> boundaries);
48 void add(size_t boundary);
49 std::vector<IndicesOfBlock> create() const;
50 size_t size() const;
51
52private:
53 std::set<size_t> boundaries;
54};
55
56template <typename Scalar>
58public:
60
62
64 virtual const Transformation<Scalar> &get_transformation() const = 0;
65 virtual Transformation<Scalar> get_rotator(real_t alpha, real_t beta, real_t gamma) const = 0;
66 virtual Sorting get_sorter(const std::vector<TransformationType> &labels) const = 0;
67 virtual std::vector<IndicesOfBlock>
68 get_indices_of_blocks(const std::vector<TransformationType> &labels) const = 0;
69
70 Transformation<Scalar> get_rotator(const std::array<real_t, 3> &to_z_axis,
71 const std::array<real_t, 3> &to_y_axis) const;
72};
73
74extern template struct Transformation<double>;
75extern template struct Transformation<std::complex<double>>;
76
77extern template class TransformationBuilderInterface<double>;
79} // namespace pairinteraction
IndicesOfBlocksCreator(std::initializer_list< size_t > boundaries)
std::vector< IndicesOfBlock > create() const
virtual Transformation< Scalar > get_rotator(real_t alpha, real_t beta, real_t gamma) const =0
virtual const Transformation< Scalar > & get_transformation() const =0
typename traits::NumTraits< Scalar >::real_t real_t
virtual std::vector< IndicesOfBlock > get_indices_of_blocks(const std::vector< TransformationType > &labels) const =0
virtual Sorting get_sorter(const std::vector< TransformationType > &labels) const =0
Eigen::PermutationMatrix< Eigen::Dynamic, Eigen::Dynamic > matrix
std::vector< TransformationType > transformation_type
Eigen::SparseMatrix< Scalar, Eigen::RowMajor > matrix
std::vector< TransformationType > transformation_type
Helper struct to extract types from a numerical type.
Definition: traits.hpp:35