15 inline std::array<int,3>
18 return std::array<int,3>{kv.
nmp[0], kv.
nmp[1], kv.
nmp[2]};
21 template<
typename Tcell>
22 std::vector<std::array<Tcell,1>>
25 using namespace RI::Array_Operator;
26 std::vector<std::array<Tcell,1>> Born_von_Karman_cells;
27 for(
int c=0; c<Born_von_Karman_period[0]; ++c )
28 Born_von_Karman_cells.emplace_back( std::array<Tcell,1>{c} % Born_von_Karman_period );
29 return Born_von_Karman_cells;
32 template<
typename Tcell,
size_t Ndim>
33 std::vector<std::array<Tcell,Ndim>>
36 using namespace RI::Array_Operator;
38 std::array<Tcell,Ndim-1> sub_Born_von_Karman_period;
39 for(
int i=0; i<Ndim-1; ++i)
40 sub_Born_von_Karman_period[i] = Born_von_Karman_period[i];
42 std::vector<std::array<Tcell,Ndim>> Born_von_Karman_cells;
44 for( Tcell c=0; c<Born_von_Karman_period.back(); ++c )
46 std::array<Tcell,Ndim> cell;
47 for(
int i=0; i<Ndim-1; ++i)
48 cell[i] = sub_cell[i];
49 cell.back() = (std::array<Tcell,1>{c} % std::array<Tcell,1>{Born_von_Karman_period.back()})[0];
50 Born_von_Karman_cells.emplace_back(std::move(cell));
52 return Born_von_Karman_cells;
70 inline std::map<Conv_Coulomb_Pot_K::Coulomb_Type, std::vector<std::map<std::string,std::string>>>
76 std::map<Conv_Coulomb_Pot_K::Coulomb_Type, std::vector<std::map<std::string,std::string>>> coulomb_param_updated = coulomb_param;
77 for(
auto ¶m_list : coulomb_param_updated)
79 for(
auto &
param : param_list.second)
81 if(
param.at(
"singularity_correction") ==
"spencer")
88 else if(
param.at(
"singularity_correction") ==
"revised_spencer")
90 const double bvk_a1 = ucell.
a1.
norm() * p_kv->
nmp[0];
91 const double bvk_a2 = ucell.
a2.
norm() * p_kv->
nmp[1];
92 const double bvk_a3 = ucell.
a3.
norm() * p_kv->
nmp[2];
93 const double Rcut = 0.5 * std::min({bvk_a1, bvk_a2, bvk_a3});
98 return coulomb_param_updated;
104 std::vector<std::map<std::string,std::string>>>>>
110 const std::map<Conv_Coulomb_Pot_K::Coulomb_Type, std::vector<std::map<std::string,std::string>>>
114 std::map<Conv_Coulomb_Pot_K::Coulomb_Type, std::vector<std::map<std::string,std::string>>> coulomb_param_center2;
115 std::map<Conv_Coulomb_Pot_K::Coulomb_Type, std::vector<std::map<std::string,std::string>>> coulomb_param_ewald;
116 for(
auto ¶m_list : coulomb_param_updated)
118 for(
auto &
param : param_list.second)
120 if(
param.at(
"singularity_correction") ==
"spencer" ||
param.at(
"singularity_correction") ==
"limits"
121 ||
param.at(
"singularity_correction") ==
"revised_spencer")
123 coulomb_param_center2[param_list.first].push_back(
param);
125 else if (
param.at(
"singularity_correction") ==
"massidda" ||
param.at(
"singularity_correction") ==
"carrier" )
127 coulomb_param_ewald[param_list.first].push_back(
param);
135 std::vector<std::map<std::string,std::string>>>>> coulomb_settings;
137 if(!coulomb_param_center2.empty())
141 if (!coulomb_param_ewald.empty())
146 return coulomb_settings;
int get_nkstot_full() const
Definition klist.h:78
int nmp[3]
distinguish spin up and down k points
Definition klist.h:23
T norm(void) const
Get the norm of a Vector3.
Definition vector3.h:187
const Input_para & inp
Definition parameter.h:26
double & omega
Definition unitcell.h:32
ModuleBase::Vector3< double > & a2
Definition unitcell.h:36
ModuleBase::Vector3< double > & a3
Definition unitcell.h:36
ModuleBase::Vector3< double > & a1
Definition unitcell.h:36
Parameter param
Definition io_system_variable_test.cpp:38
Coulomb_Type
Definition conv_coulomb_pot_k.h:10
Coulomb_Method
Definition conv_coulomb_pot_k.h:16
std::string TO_STRING(const T &t, const int n=20)
Definition global_function.h:239
const double PI
Definition constants.h:19
std::array< int, 3 > get_Born_vonKarmen_period(const K_Vectors &kv)
Definition RI_Util.hpp:16
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
Parameter PARAM
Definition parameter.cpp:3