ABACUS develop
Atomic-orbital Based Ab-initio Computation at UStc
Loading...
Searching...
No Matches
RI_Util.h
Go to the documentation of this file.
1//=======================
2// AUTHOR : Peize Lin
3// DATE : 2022-08-17
4//=======================
5
6#ifndef RI_UTIL_H
7#define RI_UTIL_H
8
10#include "source_cell/klist.h"
11
12#include <RI/global/Array_Operator.h>
13#include <RI/global/Global_Func-2.h>
14#include <RI/global/Tensor.h>
15
16#include <array>
17#include <vector>
18#include <map>
19#include <string>
20
21namespace RI_Util
22{
23 inline extern std::array<int,3>
25
26 template<typename Tcell, size_t Ndim>
27 extern std::vector<std::array<Tcell,Ndim>>
28 get_Born_von_Karmen_cells( const std::array<Tcell,Ndim> &Born_von_Karman_period );
29
30 template<typename Tcell>
31 inline std::array<Tcell,3>
33 {
34 return std::array<Tcell,3> {v.x, v.y, v.z};
35 }
36 template<typename Tcell>
38 array3_to_Vector3(const std::array<Tcell,3> &v)
39 {
40 return ModuleBase::Vector3<Tcell> {v[0], v[1], v[2]};
41 }
42
43 template<typename Tdata, typename Tmatrix>
44 RI::Tensor<Tdata>
45 Matrix_to_Tensor(const Tmatrix &m_old)
46 {
47 RI::Tensor<Tdata> m_new({static_cast<size_t>(m_old.nr), static_cast<size_t>(m_old.nc)});
48 for(int ir=0; ir<m_old.nr; ++ir)
49 for(int ic=0; ic<m_old.nc; ++ic)
50 m_new(ir,ic) = RI::Global_Func::convert<Tdata>(m_old(ir,ic));
51 return m_new;
52 }
53
54 template<typename Tdata>
55 RI::Tensor<Tdata>
56 Vector_to_Tensor(const std::vector<Tdata>& m_old, const int nr, const int nc)
57 {
58 assert(nr * nc == m_old.size());
59 RI::Tensor<Tdata> m_new({ static_cast<size_t>(nr), static_cast<size_t>(nc) });
60 for (int ir = 0; ir < nr; ++ir)
61 for (int ic = 0; ic < nc; ++ic)
62 m_new(ir, ic) = RI::Global_Func::convert<Tdata>(m_old[ir * nc + ic]);
63 return m_new;
64 }
65
66 std::map<Conv_Coulomb_Pot_K::Coulomb_Type, std::vector<std::map<std::string,std::string>>>
68 const std::map<Conv_Coulomb_Pot_K::Coulomb_Type, std::vector<std::map<std::string,std::string>>> &coulomb_param,
69 const UnitCell &ucell,
70 const K_Vectors *p_kv);
71
73 std::pair<bool,
75 std::vector<std::map<std::string,std::string>>>>>
77 const std::map<Conv_Coulomb_Pot_K::Coulomb_Type, std::vector<std::map<std::string,std::string>>> &coulomb_param,
78 const UnitCell &ucell,
79 const K_Vectors *p_kv);
80}
81
82#include "RI_Util.hpp"
83
84#endif
Definition klist.h:13
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 unitcell.h:16
Coulomb_Type
Definition conv_coulomb_pot_k.h:10
Coulomb_Method
Definition conv_coulomb_pot_k.h:16
Definition RI_Util.h:22
std::array< Tcell, 3 > Vector3_to_array3(const ModuleBase::Vector3< Tcell > &v)
Definition RI_Util.h:32
RI::Tensor< Tdata > Vector_to_Tensor(const std::vector< Tdata > &m_old, const int nr, const int nc)
Definition RI_Util.h:56
std::array< int, 3 > get_Born_vonKarmen_period(const K_Vectors &kv)
Definition RI_Util.hpp:16
RI::Tensor< Tdata > Matrix_to_Tensor(const Tmatrix &m_old)
Definition RI_Util.h:45
std::map< Conv_Coulomb_Pot_K::Coulomb_Type, std::vector< std::map< std::string, std::string > > > update_coulomb_param(const std::map< Conv_Coulomb_Pot_K::Coulomb_Type, std::vector< std::map< std::string, std::string > > > &coulomb_param, const UnitCell &ucell, const K_Vectors *p_kv)
Definition RI_Util.hpp:71
std::map< Conv_Coulomb_Pot_K::Coulomb_Method, std::pair< bool, std::map< Conv_Coulomb_Pot_K::Coulomb_Type, std::vector< std::map< std::string, std::string > > > > > update_coulomb_settings(const std::map< Conv_Coulomb_Pot_K::Coulomb_Type, std::vector< std::map< std::string, std::string > > > &coulomb_param, const UnitCell &ucell, const K_Vectors *p_kv)
Definition RI_Util.hpp:105
std::vector< std::array< Tcell, Ndim > > get_Born_von_Karmen_cells(const std::array< Tcell, Ndim > &Born_von_Karman_period)
Definition RI_Util.hpp:34
ModuleBase::Vector3< Tcell > array3_to_Vector3(const std::array< Tcell, 3 > &v)
Definition RI_Util.h:38