4#include <RI/global/Tensor.h>
10 using Tap = std::pair<int, int>;
11 using TC = std::array<int, 3>;
12 using TapR = std::pair<Tap, TC>;
40 const std::vector<TC>& Rs,
const TC& period,
const Lattice& lat)
59 const std::vector<std::vector<std::complex<double>>>& dm_k_ibz,
62 const std::vector<std::vector<double>>& dm_k_ibz,
64 std::vector<std::complex<double>>
rot_matrix_ao(
const std::vector<std::complex<double>>& DMkibz,
65 const int ik_ibz,
const int kstar_size,
const int isym,
const Parallel_2D& pv,
const bool TRS_conj =
false)
const;
68 double wigner_d(
const double beta,
const int l,
const int m1,
const int m2)
const;
69 std::complex<double>
wigner_D(
const TCdouble& euler_angle,
const int l,
const int m1,
const int m2,
const bool inv)
const;
72 std::complex<double>
ovlp_Ylm_Slm(
const int l,
const int m1,
const int m2)
const;
82 void set_block_to_mat2d(
const int starti,
const int startj,
const RI::Tensor<std::complex<double>>& block,
83 std::vector<std::complex<double>>& obj_mat,
const Parallel_2D& pv,
const bool trans =
false)
const;
84 void set_block_to_mat2d(
const int starti,
const int startj,
const RI::Tensor<std::complex<double>>& block,
85 std::vector<double>& obj_mat,
const Parallel_2D& pv,
const bool trans =
false)
const;
97 template<
typename Tdata>
98 std::map<int, std::map<std::pair<int, TC>, RI::Tensor<Tdata>>>
restore_HR(
100 const std::map<
int, std::map<std::pair<int, TC>, RI::Tensor<Tdata>>>& HR_irreduceble)
const;
101 template<
typename TR>
109 template<
typename Tdata>
111 const std::map<
int, std::map<std::pair<int, TC>, RI::Tensor<Tdata>>>& HR_full);
112 template<
typename Tdata>
114 const std::map<
int, std::map<std::pair<int, TC>, RI::Tensor<Tdata>>>& Cs_full)
const;
115 template<
typename TR>
118 template<
typename Tdata>
119 void print_HR(
const std::map<
int, std::map<std::pair<int, TC>, RI::Tensor<Tdata>>>& HR,
const std::string name,
const double&
threshold = 0.0);
133 template<
typename Tdata>
135 const Atom& a1,
const Atom& a2,
const char mode,
bool output =
false)
const;
136 template<
typename Tdata>
138 const Atom& a1,
const Atom& a2,
const char mode)
const;
139 template<
typename TR>
144 template<
typename Tdata>
146 const Atom& a1,
const Atom& a2,
const int& type1,
bool output =
false)
const;
148 template<
typename Tdata>
150 template<
typename Tdata>
166 std::vector<std::vector<RI::Tensor<std::complex<double>>>>
rotmat_Slm_;
172 std::vector<std::map<int, std::vector<std::complex<double>>>>
Ms_;
179 template<
typename T> std::string
vec3_fmt(
const T& x,
const T& y,
const T& z)
181 return "(" + std::to_string(x) +
" " + std::to_string(y) +
" " + std::to_string(z) +
")";
191 const int lmax_ao,
const std::vector<TC>& Rs);
Definition abfs-vector3_order.h:16
Definition sltk_grid_driver.h:43
3x3 matrix and related mathamatical operations
Definition matrix3.h:19
3 elements vector
Definition vector3.h:22
T x
Definition vector3.h:24
T y
Definition vector3.h:25
T z
Definition vector3.h:26
Definition irreducible_sector.h:19
TCdouble get_return_lattice(const Symmetry &symm, const ModuleBase::Matrix3 &gmatd, const TCdouble gtransd, const TCdouble &posd_a1, const TCdouble &posd_a2) const
Definition irreducible_sector.cpp:50
const std::map< Tap, std::set< TC > > & get_irreducible_sector() const
Definition irreducible_sector.h:60
void find_irreducible_sector(const Symmetry &symm, const Atom *atoms, const Statistics &st, const std::vector< TC > &Rs, const TC &period, const Lattice &lat)
The main function to find irreducible sector: {abR}.
Definition irreducible_sector.cpp:160
Definition symmetry_rotation.h:16
int nsym_
Definition symmetry_rotation.h:154
void set_abfs_Lmax(const int l)
Definition symmetry_rotation.h:44
double eps_
Definition symmetry_rotation.h:156
bool reduce_Cs_
Definition symmetry_rotation.h:160
const int & abfs_Lmax
Definition symmetry_rotation.h:36
std::vector< std::vector< RI::Tensor< std::complex< double > > > > & get_rotmat_Slm()
Definition symmetry_rotation.h:92
void test_Cs_rotation(const Symmetry &symm, const Atom *atoms, const Statistics &st, const std::map< int, std::map< std::pair< int, TC >, RI::Tensor< Tdata > > > &Cs_full) const
Definition symmetry_rotation_R.hpp:287
std::vector< std::vector< std::complex< double > > > restore_dm(const K_Vectors &kv, const std::vector< std::vector< std::complex< double > > > &dm_k_ibz, const Parallel_2D &pv) const
Definition symmetry_rotation.cpp:80
Symmetry_rotation()
Definition symmetry_rotation.h:18
TCdouble get_return_lattice(const Symmetry &symm, const ModuleBase::Matrix3 &gmatd, const TCdouble gtransd, const TCdouble &posd_a1, const TCdouble &posd_a2) const
Definition symmetry_rotation.h:24
double wigner_d(const double beta, const int l, const int m1, const int m2) const
calculate Wigner D matrix
Definition symmetry_rotation.cpp:154
std::vector< std::vector< RI::Tensor< std::complex< double > > > > rotmat_Slm_
the rotation matrix under the basis of S_l^m. size: [nsym][lmax][nm*nm]
Definition symmetry_rotation.h:166
void rotate_atompair_parallel(const TR *Alocal_in, const int isym, const Atom *atoms, const Statistics &st, const Tap &ap_in, const Tap &ap_out, const char mode, const Parallel_Orbitals &pv, TR *Alocal_out, const bool output=false) const
Definition symmetry_rotation_R_hcontainer.hpp:80
~Symmetry_rotation()
Definition symmetry_rotation.h:19
void set_Cs_rotation(const std::vector< std::vector< int > > &abfs_l_nchi)
Definition symmetry_rotation.cpp:15
std::vector< std::map< int, std::vector< std::complex< double > > > > Ms_
Definition symmetry_rotation.h:172
std::vector< std::vector< int > > abfs_l_nchi_
number of abfs for each angular momentum
Definition symmetry_rotation.h:163
RI::Tensor< Tdata > rotate_atompair_serial(const RI::Tensor< Tdata > &A, const int isym, const Atom &a1, const Atom &a2, const char mode, bool output=false) const
Definition symmetry_rotation_R.hpp:141
std::map< int, std::map< std::pair< int, TC >, RI::Tensor< Tdata > > > restore_HR(const Symmetry &symm, const Atom *atoms, const Statistics &st, const char mode, const std::map< int, std::map< std::pair< int, TC >, RI::Tensor< Tdata > > > &HR_irreduceble) const
Definition symmetry_rotation_R.hpp:40
void test_HR_rotation(const Symmetry &symm, const Atom *atoms, const Statistics &st, const char mode, const std::map< int, std::map< std::pair< int, TC >, RI::Tensor< Tdata > > > &HR_full)
Definition symmetry_rotation_R.hpp:241
TCdouble get_return_lattice(const int iat, const int isym) const
Definition symmetry_rotation.h:30
RI::Tensor< Tdata > set_rotation_matrix(const Atom &a, const int &isym) const
Definition symmetry_rotation_R.hpp:127
int abfs_Lmax_
Definition symmetry_rotation.h:161
const std::map< Tap, std::set< TC > > & get_irreducible_sector() const
Definition symmetry_rotation.h:23
std::vector< TC > get_Rs_from_BvK(const K_Vectors &kv) const
Definition symmetry_rotation.cpp:476
RI::Tensor< Tdata > set_rotation_matrix_abf(const int &type, const int &isym) const
Definition symmetry_rotation_R.hpp:183
std::complex< double > ovlp_Ylm_Slm(const int l, const int m1, const int m2) const
c^l_{m1, m2}=<Y_l^m1|S_l^m2>
Definition symmetry_rotation.cpp:180
void cal_Ms(const K_Vectors &kv, const UnitCell &ucell, const Parallel_2D &pv)
functions to contruct rotation matrix in AO-representation
Definition symmetry_rotation.cpp:21
void cal_rotmat_Slm(const ModuleBase::Matrix3 *gmatc, const int lmax)
T_mm' = [c^\dagger D c]_mm', the rotation matrix in the representation of real sphere harmonics.
Definition symmetry_rotation.cpp:254
std::complex< double > wigner_D(const TCdouble &euler_angle, const int l, const int m1, const int m2, const bool inv) const
Definition symmetry_rotation.cpp:171
void find_irreducible_sector(const Symmetry &symm, const Atom *atoms, const Statistics &st, const std::vector< TC > &Rs, const TC &period, const Lattice &lat)
Definition symmetry_rotation.h:39
std::vector< TC > get_Rs_from_adjacent_list(const UnitCell &ucell, const Grid_Driver &gd, const Parallel_Orbitals &pv) const
Definition symmetry_rotation.cpp:442
TCdouble get_euler_angle(const ModuleBase::Matrix3 &gmatc) const
calculate euler angle from rotation matrix
Definition symmetry_rotation.cpp:205
void print_HR(const std::map< int, std::map< std::pair< int, TC >, RI::Tensor< Tdata > > > &HR, const std::string name, const double &threshold=0.0)
Definition symmetry_rotation_R.hpp:224
std::vector< std::complex< double > > rot_matrix_ao(const std::vector< std::complex< double > > &DMkibz, const int ik_ibz, const int kstar_size, const int isym, const Parallel_2D &pv, const bool TRS_conj=false) const
Definition symmetry_rotation.cpp:405
RI::Tensor< Tdata > rotate_singleC_serial(const RI::Tensor< Tdata > &C, const int isym, const Atom &a1, const Atom &a2, const int &type1, bool output=false) const
rotate a 3-dim C tensor in RI technique
Definition symmetry_rotation_R.hpp:205
const std::vector< std::vector< RI::Tensor< std::complex< double > > > > & rotmat_Slm
the rotation matrix under the basis of S_l^m. size: [nsym][lmax][nm*nm]
Definition symmetry_rotation.h:35
std::vector< std::complex< double > > contruct_2d_rot_mat_ao(const Symmetry &symm, const Atom *atoms, const Statistics &cell_st, const TCdouble &kvec_d_ibz, int isym, const Parallel_2D &pv) const
Definition symmetry_rotation.cpp:370
Irreducible_Sector irs_
irreducible sector
Definition symmetry_rotation.h:175
void set_block_to_mat2d(const int starti, const int startj, const RI::Tensor< std::complex< double > > &block, std::vector< std::complex< double > > &obj_mat, const Parallel_2D &pv, const bool trans=false) const
Definition symmetry_rotation.cpp:340
bool TRS_first_
Definition symmetry_rotation.h:158
This class packs the basic information of 2D-block-cyclic parallel distribution of an arbitrary matri...
Definition parallel_2d.h:12
Definition parallel_orbitals.h:9
Definition hcontainer.h:144
#define T
Definition exp.cpp:237
Definition symm_other.cpp:4
Abfs::Vector3_Order< double > TCdouble
Definition irreducible_sector.h:16
std::pair< Tap, TC > TapR
Definition irreducible_sector.h:15
std::string vec3_fmt(const T &x, const T &y, const T &z)
Definition symmetry_rotation.h:179
void print_symrot_info_k(const ModuleSymmetry::Symmetry_rotation &symrot, const K_Vectors &kv, const UnitCell &ucell)
Definition symmetry_rotation_output.cpp:54
std::array< int, 3 > TC
Definition irreducible_sector.h:14
void print_symrot_info_R(const Symmetry_rotation &symrot, const Symmetry &symm, const int lmax_ao, const std::vector< TC > &Rs)
Definition symmetry_rotation_output.cpp:14
std::pair< int, int > Tap
Definition irreducible_sector.h:13
std::array< int, 3 > TC
Definition ri_cv_io_test.cpp:9
#define threshold
Definition sph_bessel_recursive_test.cpp:4
info of lattice
Definition unitcell_data.h:8
usefull data and index maps
Definition unitcell_data.h:47