27 const double tf_weight,
28 const double vw_weight,
31 const std::vector<double> &
chi_xi,
32 const std::vector<double> &
chi_pnl,
33 const std::vector<double> &
chi_qnl,
35 const std::vector<int> &kernel_type,
36 const std::vector<double> &kernel_scaling,
37 const std::vector<double> &yukawa_alpha,
38 const std::vector<std::string> &kernel_file,
39 const bool &of_ml_gamma,
42 const bool &of_ml_tanhp,
43 const bool &of_ml_tanhq,
44 const std::vector<int> &of_ml_gammanl,
45 const std::vector<int> &of_ml_pnl,
46 const std::vector<int> &of_ml_qnl,
47 const std::vector<int> &of_ml_xi,
48 const std::vector<int> &of_ml_tanhxi,
49 const std::vector<int> &of_ml_tanhxi_nl,
50 const std::vector<int> &of_ml_tanh_pnl,
51 const std::vector<int> &of_ml_tanh_qnl,
52 const std::vector<int> &of_ml_tanhp_nl,
53 const std::vector<int> &of_ml_tanhq_nl,
54 const std::string device_inpt,
93 void loadVector(std::string filename, std::vector<double> &data);
94 void dumpVector(std::string filename,
const std::vector<double> &data);
95 void dumpTensor(std::string filename,
const torch::Tensor &data);
105 const double cTF = 3.0/10.0 * std::pow(3*std::pow(M_PI, 2.0), 2.0/3.0) * 2;
106 const double pqcoef = 1.0 / (4.0 * std::pow(3*std::pow(M_PI, 2.0), 2.0/3.0));
115 std::vector<double>
p = {};
116 std::vector<double>
q = {};
117 std::vector<std::vector<double>>
gammanl = {};
118 std::vector<std::vector<double>>
pnl = {};
119 std::vector<std::vector<double>>
qnl = {};
125 std::vector<std::vector<double>>
xi = {};
126 std::vector<std::vector<double>>
tanhxi = {};
140 torch::Device
device = torch::Device(torch::kCPU);
144 std::shared_ptr<NN_OFImpl>
nn;
153 const bool &of_ml_gamma,
156 const bool &of_ml_tanhp,
157 const bool &of_ml_tanhq,
158 const std::vector<int> &of_ml_gammanl_,
159 const std::vector<int> &of_ml_pnl,
160 const std::vector<int> &of_ml_qnl,
161 const std::vector<int> &of_ml_xi,
162 const std::vector<int> &of_ml_tanhxi,
163 const std::vector<int> &of_ml_tanhxi_nl,
164 const std::vector<int> &of_ml_tanh_pnl,
165 const std::vector<int> &of_ml_tanh_qnl,
166 const std::vector<int> &of_ml_tanhp_nl,
167 const std::vector<int> &of_ml_tanhq_nl
193 torch::Tensor
get_data(std::string parameter,
const int ikernel);
void potTanhxi_nlTerm(const double *const *prho, ModulePW::PW_Basis *pw_rho, std::vector< double > &rTanhxi_nlTerm)
Definition kedf_ml_pot.cpp:177
double potPTerm1(int ir)
Definition kedf_ml_pot.cpp:69
std::vector< double > gamma
Definition kedf_ml.h:114
bool ml_pnl
Definition kedf_ml.h:177
bool ml_tanhp
Definition kedf_ml.h:174
void potTanhpTanh_pnlTerm(const double *const *prho, ModulePW::PW_Basis *pw_rho, std::vector< double > &rTanhpTanh_pnlTerm)
Definition kedf_ml_pot.cpp:315
std::vector< std::vector< double > > tanhxi
Definition kedf_ml.h:126
int nx
Definition kedf_ml.h:101
double chi_q
Definition kedf_ml.h:124
bool ml_tanhxi
Definition kedf_ml.h:180
bool ml_tanh_qnl
Definition kedf_ml.h:183
void dumpMatrix(std::string filename, const ModuleBase::matrix &data)
Dump the matrix into .npy file.
Definition kedf_ml.cpp:363
bool ml_tanh_pnl
Definition kedf_ml.h:182
void dumpTensor(std::string filename, const torch::Tensor &data)
Dump the torch::Tensor into .npy file.
Definition kedf_ml.cpp:348
void loadVector(std::string filename, std::vector< double > &data)
Definition kedf_ml.cpp:329
void generateTrainData(const double *const *prho, ModulePW::PW_Basis *pw_rho, const double *veff)
Generate training data for ML KEDF.
Definition kedf_ml.cpp:188
void potXinlTerm(const double *const *prho, ModulePW::PW_Basis *pw_rho, std::vector< double > &rXinlTerm)
Definition kedf_ml_pot.cpp:136
bool ml_gammanl
Definition kedf_ml.h:176
const double cTF
Definition kedf_ml.h:105
double potQTerm1(int ir)
Definition kedf_ml_pot.cpp:74
double feg_net_F
Definition kedf_ml.h:109
bool ml_tanhxi_nl
Definition kedf_ml.h:181
std::vector< std::vector< double > > tanh_qnl
Definition kedf_ml.h:134
std::vector< double > chi_xi
Definition kedf_ml.h:122
int nkernel
Definition kedf_ml.h:148
bool ml_tanhq_nl
Definition kedf_ml.h:185
std::vector< double > q
Definition kedf_ml.h:116
std::vector< std::vector< double > > qnl
Definition kedf_ml.h:119
std::vector< std::vector< double > > tanhxi_nl
Definition kedf_ml.h:127
torch::Device device_CPU
Definition kedf_ml.h:141
void ml_potential(const double *const *prho, ModulePW::PW_Basis *pw_rho, ModuleBase::matrix &rpotential)
Get the potential of ML KEDF, and add it into rpotential.
Definition kedf_ml.cpp:153
void potTanhpTanhp_nlTerm(const double *const *prho, ModulePW::PW_Basis *pw_rho, std::vector< double > &rTanhpTanhp_nlTerm)
Definition kedf_ml_pot.cpp:426
std::vector< std::vector< double > > tanhp_nl
Definition kedf_ml.h:136
std::map< std::string, std::vector< int > > descriptor2index
Definition kedf_ml.h:190
std::vector< std::vector< double > > nablaRho
Definition kedf_ml.h:120
std::vector< std::vector< double > > xi
Definition kedf_ml.h:125
std::vector< double > tanhq
Definition kedf_ml.h:129
std::vector< int > kernel_index
Definition kedf_ml.h:188
void potGammanlTerm(const double *const *prho, ModulePW::PW_Basis *pw_rho, std::vector< double > &rGammanlTerm)
Definition kedf_ml_pot.cpp:116
KEDF_ML()
Definition kedf_ml.h:14
~KEDF_ML()
Definition kedf_ml.h:18
bool ml_p
Definition kedf_ml.h:172
void set_para(const int nx, const double dV, const double nelec, const double tf_weight, const double vw_weight, const double chi_p, const double chi_q, const std::vector< double > &chi_xi, const std::vector< double > &chi_pnl, const std::vector< double > &chi_qnl, const int &nkernel, const std::vector< int > &kernel_type, const std::vector< double > &kernel_scaling, const std::vector< double > &yukawa_alpha, const std::vector< std::string > &kernel_file, const bool &of_ml_gamma, const bool &of_ml_p, const bool &of_ml_q, const bool &of_ml_tanhp, const bool &of_ml_tanhq, const std::vector< int > &of_ml_gammanl, const std::vector< int > &of_ml_pnl, const std::vector< int > &of_ml_qnl, const std::vector< int > &of_ml_xi, const std::vector< int > &of_ml_tanhxi, const std::vector< int > &of_ml_tanhxi_nl, const std::vector< int > &of_ml_tanh_pnl, const std::vector< int > &of_ml_tanh_qnl, const std::vector< int > &of_ml_tanhp_nl, const std::vector< int > &of_ml_tanhq_nl, const std::string device_inpt, ModulePW::PW_Basis *pw_rho)
Definition kedf_ml.cpp:10
int nx_tot
Definition kedf_ml.h:102
void potPPnlTerm(const double *const *prho, ModulePW::PW_Basis *pw_rho, std::vector< double > &rPPnlTerm)
Definition kedf_ml_pot.cpp:210
torch::DeviceType device_type
Definition kedf_ml.h:139
std::vector< double > chi_qnl
Definition kedf_ml.h:132
double chi_p
Definition kedf_ml.h:123
double dV
Definition kedf_ml.h:103
double potGammaTerm(int ir)
Definition kedf_ml_pot.cpp:64
void potTanhqTanhq_nlTerm(const double *const *prho, ModulePW::PW_Basis *pw_rho, std::vector< double > &rTanhqTanhq_nlTerm)
Definition kedf_ml_pot.cpp:484
double potTanhqTerm1(int ir)
Definition kedf_ml_pot.cpp:110
std::vector< double > chi_pnl
Definition kedf_ml.h:131
void localTest(const double *const *prho, ModulePW::PW_Basis *pw_rho)
For test.
Definition kedf_ml.cpp:218
std::map< std::string, std::vector< bool > > gene_data_label
Definition kedf_ml.h:191
torch::Tensor get_data(std::string parameter, const int ikernel)
Return the descriptors for ML KEDF.
Definition kedf_ml.cpp:445
void potQQnlTerm(const double *const *prho, ModulePW::PW_Basis *pw_rho, std::vector< double > &rQQnlTerm)
Definition kedf_ml_pot.cpp:267
void NN_forward(const double *const *prho, ModulePW::PW_Basis *pw_rho, bool cal_grad)
Interface to Neural Network forward.
Definition kedf_ml.cpp:292
std::vector< std::vector< double > > tanhq_nl
Definition kedf_ml.h:137
double get_energy(const double *const *prho, ModulePW::PW_Basis *pw_rho)
Get the energy of ML KEDF.
Definition kedf_ml.cpp:125
void set_device(std::string device_inpt)
Set the device for ML KEDF.
Definition kedf_ml.cpp:261
void potTanhqTanh_qnlTerm(const double *const *prho, ModulePW::PW_Basis *pw_rho, std::vector< double > &rTanhqTanh_qnlTerm)
Definition kedf_ml_pot.cpp:374
torch::Device device
Definition kedf_ml.h:140
double feg3_correct
Definition kedf_ml.h:110
bool ml_tanhq
Definition kedf_ml.h:175
double potTanhpTerm1(int ir)
Definition kedf_ml_pot.cpp:104
std::vector< double > p
Definition kedf_ml.h:115
void dumpVector(std::string filename, const std::vector< double > &data)
Definition kedf_ml.cpp:336
std::vector< double > tanhp
Definition kedf_ml.h:128
std::shared_ptr< NN_OFImpl > nn
Definition kedf_ml.h:144
void init_data(const int &nkernel, const bool &of_ml_gamma, const bool &of_ml_p, const bool &of_ml_q, const bool &of_ml_tanhp, const bool &of_ml_tanhq, const std::vector< int > &of_ml_gammanl_, const std::vector< int > &of_ml_pnl, const std::vector< int > &of_ml_qnl, const std::vector< int > &of_ml_xi, const std::vector< int > &of_ml_tanhxi, const std::vector< int > &of_ml_tanhxi_nl, const std::vector< int > &of_ml_tanh_pnl, const std::vector< int > &of_ml_tanh_qnl, const std::vector< int > &of_ml_tanhp_nl, const std::vector< int > &of_ml_tanhq_nl)
Initialize the data for ML KEDF, and generate the mapping between descriptor and kernel.
Definition kedf_ml_label.cpp:25
std::map< std::string, std::vector< int > > descriptor2kernel
Definition kedf_ml.h:189
double * enhancement_cpu_ptr
Definition kedf_ml.h:145
double ml_energy
Definition kedf_ml.h:107
bool ml_gamma
Definition kedf_ml.h:171
std::vector< std::vector< double > > gammanl
Definition kedf_ml.h:117
double potXiTerm1(int ir)
Definition kedf_ml_pot.cpp:79
void potTanhxinlTerm(const double *const *prho, ModulePW::PW_Basis *pw_rho, std::vector< double > &rTanhxinlTerm)
Definition kedf_ml_pot.cpp:156
std::vector< std::vector< double > > pnl
Definition kedf_ml.h:118
void updateInput(const double *const *prho, ModulePW::PW_Basis *pw_rho)
Update the desciptors for ML KEDF.
Definition kedf_ml.cpp:377
std::vector< std::vector< double > > tanh_pnl
Definition kedf_ml.h:133
void get_potential_(const double *const *prho, ModulePW::PW_Basis *pw_rho, ModuleBase::matrix &rpotential)
Calculate the Pauli potential of ML KEDF.
Definition kedf_ml_pot.cpp:15
bool ml_tanhp_nl
Definition kedf_ml.h:184
const double pqcoef
Definition kedf_ml.h:106
bool ml_qnl
Definition kedf_ml.h:178
bool ml_q
Definition kedf_ml.h:173
int ninput
Definition kedf_ml.h:113
double potTanhxiTerm1(int ir)
Definition kedf_ml_pot.cpp:91
double * gradient_cpu_ptr
Definition kedf_ml.h:146
bool ml_xi
Definition kedf_ml.h:179
ModuleIO::Cal_MLKEDF_Descriptors * cal_tool
Definition kedf_ml.h:99
std::vector< std::string > descriptor_type
Definition kedf_ml.h:187
A class to calculate the descriptors for ML KEDF. Sun, Liang, and Mohan Chen. Physical Review B 109....
Definition cal_mlkedf_descriptors.h:19
A class which can convert a function of "r" to the corresponding linear superposition of plane waves ...
Definition pw_basis.h:56