ABACUS develop
Atomic-orbital Based Ab-initio Computation at UStc
|
#include <kedf_ml.h>
Public Member Functions | |
KEDF_ML () | |
~KEDF_ML () | |
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) |
void | set_device (std::string device_inpt) |
Set the device for ML KEDF. | |
double | get_energy (const double *const *prho, ModulePW::PW_Basis *pw_rho) |
Get the energy of ML KEDF. | |
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. | |
void | generateTrainData (const double *const *prho, ModulePW::PW_Basis *pw_rho, const double *veff) |
Generate training data for ML KEDF. | |
void | localTest (const double *const *prho, ModulePW::PW_Basis *pw_rho) |
For test. | |
void | NN_forward (const double *const *prho, ModulePW::PW_Basis *pw_rho, bool cal_grad) |
Interface to Neural Network forward. | |
void | get_potential_ (const double *const *prho, ModulePW::PW_Basis *pw_rho, ModuleBase::matrix &rpotential) |
Calculate the Pauli potential of ML KEDF. | |
double | potGammaTerm (int ir) |
double | potPTerm1 (int ir) |
double | potQTerm1 (int ir) |
double | potXiTerm1 (int ir) |
double | potTanhxiTerm1 (int ir) |
double | potTanhpTerm1 (int ir) |
double | potTanhqTerm1 (int ir) |
void | potGammanlTerm (const double *const *prho, ModulePW::PW_Basis *pw_rho, std::vector< double > &rGammanlTerm) |
void | potXinlTerm (const double *const *prho, ModulePW::PW_Basis *pw_rho, std::vector< double > &rXinlTerm) |
void | potTanhxinlTerm (const double *const *prho, ModulePW::PW_Basis *pw_rho, std::vector< double > &rTanhxinlTerm) |
void | potTanhxi_nlTerm (const double *const *prho, ModulePW::PW_Basis *pw_rho, std::vector< double > &rTanhxi_nlTerm) |
void | potPPnlTerm (const double *const *prho, ModulePW::PW_Basis *pw_rho, std::vector< double > &rPPnlTerm) |
void | potQQnlTerm (const double *const *prho, ModulePW::PW_Basis *pw_rho, std::vector< double > &rQQnlTerm) |
void | potTanhpTanh_pnlTerm (const double *const *prho, ModulePW::PW_Basis *pw_rho, std::vector< double > &rTanhpTanh_pnlTerm) |
void | potTanhqTanh_qnlTerm (const double *const *prho, ModulePW::PW_Basis *pw_rho, std::vector< double > &rTanhqTanh_qnlTerm) |
void | potTanhpTanhp_nlTerm (const double *const *prho, ModulePW::PW_Basis *pw_rho, std::vector< double > &rTanhpTanhp_nlTerm) |
void | potTanhqTanhq_nlTerm (const double *const *prho, ModulePW::PW_Basis *pw_rho, std::vector< double > &rTanhqTanhq_nlTerm) |
void | loadVector (std::string filename, std::vector< double > &data) |
void | dumpVector (std::string filename, const std::vector< double > &data) |
void | dumpTensor (std::string filename, const torch::Tensor &data) |
Dump the torch::Tensor into .npy file. | |
void | dumpMatrix (std::string filename, const ModuleBase::matrix &data) |
Dump the matrix into .npy file. | |
void | updateInput (const double *const *prho, ModulePW::PW_Basis *pw_rho) |
Update the desciptors for ML KEDF. | |
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. | |
torch::Tensor | get_data (std::string parameter, const int ikernel) |
Return the descriptors for ML KEDF. | |
Public Attributes | |
ModuleIO::Cal_MLKEDF_Descriptors * | cal_tool = nullptr |
int | nx = 0 |
int | nx_tot = 0 |
double | dV = 0. |
const double | cTF = 3.0/10.0 * std::pow(3*std::pow(M_PI, 2.0), 2.0/3.0) * 2 |
const double | pqcoef = 1.0 / (4.0 * std::pow(3*std::pow(M_PI, 2.0), 2.0/3.0)) |
double | ml_energy = 0. |
double | feg_net_F = 0. |
double | feg3_correct = 0.541324854612918 |
int | ninput = 0 |
std::vector< double > | gamma = {} |
std::vector< double > | p = {} |
std::vector< double > | q = {} |
std::vector< std::vector< double > > | gammanl = {} |
std::vector< std::vector< double > > | pnl = {} |
std::vector< std::vector< double > > | qnl = {} |
std::vector< std::vector< double > > | nablaRho = {} |
std::vector< double > | chi_xi = {1.0} |
double | chi_p = 1. |
double | chi_q = 1. |
std::vector< std::vector< double > > | xi = {} |
std::vector< std::vector< double > > | tanhxi = {} |
std::vector< std::vector< double > > | tanhxi_nl = {} |
std::vector< double > | tanhp = {} |
std::vector< double > | tanhq = {} |
std::vector< double > | chi_pnl = {1.0} |
std::vector< double > | chi_qnl = {1.0} |
std::vector< std::vector< double > > | tanh_pnl = {} |
std::vector< std::vector< double > > | tanh_qnl = {} |
std::vector< std::vector< double > > | tanhp_nl = {} |
std::vector< std::vector< double > > | tanhq_nl = {} |
torch::DeviceType | device_type = torch::kCPU |
torch::Device | device = torch::Device(torch::kCPU) |
torch::Device | device_CPU = torch::Device(torch::kCPU) |
std::shared_ptr< NN_OFImpl > | nn |
double * | enhancement_cpu_ptr = nullptr |
double * | gradient_cpu_ptr = nullptr |
int | nkernel = 1 |
bool | ml_gamma = false |
bool | ml_p = false |
bool | ml_q = false |
bool | ml_tanhp = false |
bool | ml_tanhq = false |
bool | ml_gammanl = false |
bool | ml_pnl = false |
bool | ml_qnl = false |
bool | ml_xi = false |
bool | ml_tanhxi = false |
bool | ml_tanhxi_nl = false |
bool | ml_tanh_pnl = false |
bool | ml_tanh_qnl = false |
bool | ml_tanhp_nl = false |
bool | ml_tanhq_nl = false |
std::vector< std::string > | descriptor_type = {} |
std::vector< int > | kernel_index = {} |
std::map< std::string, std::vector< int > > | descriptor2kernel = {} |
std::map< std::string, std::vector< int > > | descriptor2index = {} |
std::map< std::string, std::vector< bool > > | gene_data_label = {} |
|
inline |
|
inline |
void KEDF_ML::dumpMatrix | ( | std::string | filename, |
const ModuleBase::matrix & | data | ||
) |
Dump the matrix into .npy file.
data | matrix |
filename | file name |
void KEDF_ML::dumpTensor | ( | std::string | filename, |
const torch::Tensor & | data | ||
) |
Dump the torch::Tensor into .npy file.
data | torch::Tensor |
filename | file name |
void KEDF_ML::dumpVector | ( | std::string | filename, |
const std::vector< double > & | data | ||
) |
void KEDF_ML::generateTrainData | ( | const double *const * | prho, |
ModulePW::PW_Basis * | pw_rho, | ||
const double * | veff | ||
) |
torch::Tensor KEDF_ML::get_data | ( | std::string | parameter, |
const int | ikernel | ||
) |
Return the descriptors for ML KEDF.
parameter | "gamma", "p", "q", "tanhp", "tanhq", "gammanl", "pnl", "qnl", "xi", "tanhxi", "tanhxi_nl", "tanh_pnl", "tanh_qnl", "tanhp_nl", "tanhq_nl" |
ikernel | kernel index |
double KEDF_ML::get_energy | ( | const double *const * | prho, |
ModulePW::PW_Basis * | pw_rho | ||
) |
Get the energy of ML KEDF.
prho | charge density |
pw_rho | PW_Basis |
void KEDF_ML::get_potential_ | ( | const double *const * | prho, |
ModulePW::PW_Basis * | pw_rho, | ||
ModuleBase::matrix & | rpotential | ||
) |
Calculate the Pauli potential of ML KEDF.
prho | charge density |
pw_rho | PW_Basis |
rpotential | rpotential => rpotential + V_{ML} |
void KEDF_ML::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.
nkernel | number of kernels |
of_ml_gamma | whether to use gamma descriptor |
of_ml_p | whether to use p descriptor |
of_ml_q | whether to use q descriptor |
of_ml_tanhp | whether to use tanhp descriptor |
of_ml_tanhq | whether to use tanhq descriptor |
of_ml_gammanl | whether to use gammanl descriptor |
of_ml_pnl | whether to use pnl descriptor |
of_ml_qnl | whether to use qnl descriptor |
of_ml_xi | whether to use xi descriptor |
of_ml_tanhxi | whether to use tanhxi descriptor |
of_ml_tanhxi_nl | whether to use tanhxi_nl descriptor |
of_ml_tanh_pnl | whether to use tanh_pnl descriptor |
of_ml_tanh_qnl | whether to use tanh_qnl descriptor |
of_ml_tanhp_nl | whether to use tanhp_nl descriptor |
of_ml_tanhq_nl | whether to use tanhq_nl descriptor |
void KEDF_ML::loadVector | ( | std::string | filename, |
std::vector< double > & | data | ||
) |
void KEDF_ML::localTest | ( | const double *const * | pprho, |
ModulePW::PW_Basis * | pw_rho | ||
) |
For test.
prho | charge density |
pw_rho | PW_Basis |
void KEDF_ML::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.
prho | charge density |
pw_rho | PW_Basis |
rpotential | rpotential => rpotential + V_{ML} |
void KEDF_ML::NN_forward | ( | const double *const * | prho, |
ModulePW::PW_Basis * | pw_rho, | ||
bool | cal_grad | ||
) |
Interface to Neural Network forward.
prho | charge density |
pw_rho | PW_Basis |
cal_grad | whether to calculate the gradient |
void KEDF_ML::potGammanlTerm | ( | const double *const * | prho, |
ModulePW::PW_Basis * | pw_rho, | ||
std::vector< double > & | rGammanlTerm | ||
) |
double KEDF_ML::potGammaTerm | ( | int | ir | ) |
void KEDF_ML::potPPnlTerm | ( | const double *const * | prho, |
ModulePW::PW_Basis * | pw_rho, | ||
std::vector< double > & | rPPnlTerm | ||
) |
double KEDF_ML::potPTerm1 | ( | int | ir | ) |
void KEDF_ML::potQQnlTerm | ( | const double *const * | prho, |
ModulePW::PW_Basis * | pw_rho, | ||
std::vector< double > & | rQQnlTerm | ||
) |
double KEDF_ML::potQTerm1 | ( | int | ir | ) |
void KEDF_ML::potTanhpTanh_pnlTerm | ( | const double *const * | prho, |
ModulePW::PW_Basis * | pw_rho, | ||
std::vector< double > & | rTanhpTanh_pnlTerm | ||
) |
void KEDF_ML::potTanhpTanhp_nlTerm | ( | const double *const * | prho, |
ModulePW::PW_Basis * | pw_rho, | ||
std::vector< double > & | rTanhpTanhp_nlTerm | ||
) |
double KEDF_ML::potTanhpTerm1 | ( | int | ir | ) |
void KEDF_ML::potTanhqTanh_qnlTerm | ( | const double *const * | prho, |
ModulePW::PW_Basis * | pw_rho, | ||
std::vector< double > & | rTanhqTanh_qnlTerm | ||
) |
void KEDF_ML::potTanhqTanhq_nlTerm | ( | const double *const * | prho, |
ModulePW::PW_Basis * | pw_rho, | ||
std::vector< double > & | rTanhqTanhq_nlTerm | ||
) |
double KEDF_ML::potTanhqTerm1 | ( | int | ir | ) |
void KEDF_ML::potTanhxi_nlTerm | ( | const double *const * | prho, |
ModulePW::PW_Basis * | pw_rho, | ||
std::vector< double > & | rTanhxi_nlTerm | ||
) |
void KEDF_ML::potTanhxinlTerm | ( | const double *const * | prho, |
ModulePW::PW_Basis * | pw_rho, | ||
std::vector< double > & | rTanhxinlTerm | ||
) |
double KEDF_ML::potTanhxiTerm1 | ( | int | ir | ) |
void KEDF_ML::potXinlTerm | ( | const double *const * | prho, |
ModulePW::PW_Basis * | pw_rho, | ||
std::vector< double > & | rXinlTerm | ||
) |
double KEDF_ML::potXiTerm1 | ( | int | ir | ) |
void KEDF_ML::set_device | ( | std::string | device_inpt | ) |
Set the device for ML KEDF.
device_inpt | "cpu" or "gpu" |
void KEDF_ML::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 | ||
) |
void KEDF_ML::updateInput | ( | const double *const * | prho, |
ModulePW::PW_Basis * | pw_rho | ||
) |
Update the desciptors for ML KEDF.
prho | charge density |
pw_rho | PW_Basis |
ModuleIO::Cal_MLKEDF_Descriptors* KEDF_ML::cal_tool = nullptr |
double KEDF_ML::chi_p = 1. |
std::vector<double> KEDF_ML::chi_pnl = {1.0} |
double KEDF_ML::chi_q = 1. |
std::vector<double> KEDF_ML::chi_qnl = {1.0} |
std::vector<double> KEDF_ML::chi_xi = {1.0} |
const double KEDF_ML::cTF = 3.0/10.0 * std::pow(3*std::pow(M_PI, 2.0), 2.0/3.0) * 2 |
std::map<std::string, std::vector<int> > KEDF_ML::descriptor2index = {} |
std::map<std::string, std::vector<int> > KEDF_ML::descriptor2kernel = {} |
std::vector<std::string> KEDF_ML::descriptor_type = {} |
torch::Device KEDF_ML::device = torch::Device(torch::kCPU) |
torch::Device KEDF_ML::device_CPU = torch::Device(torch::kCPU) |
torch::DeviceType KEDF_ML::device_type = torch::kCPU |
double KEDF_ML::dV = 0. |
double* KEDF_ML::enhancement_cpu_ptr = nullptr |
double KEDF_ML::feg3_correct = 0.541324854612918 |
double KEDF_ML::feg_net_F = 0. |
std::vector<double> KEDF_ML::gamma = {} |
std::vector<std::vector<double> > KEDF_ML::gammanl = {} |
std::map<std::string, std::vector<bool> > KEDF_ML::gene_data_label = {} |
double* KEDF_ML::gradient_cpu_ptr = nullptr |
std::vector<int> KEDF_ML::kernel_index = {} |
double KEDF_ML::ml_energy = 0. |
bool KEDF_ML::ml_gamma = false |
bool KEDF_ML::ml_gammanl = false |
bool KEDF_ML::ml_p = false |
bool KEDF_ML::ml_pnl = false |
bool KEDF_ML::ml_q = false |
bool KEDF_ML::ml_qnl = false |
bool KEDF_ML::ml_tanh_pnl = false |
bool KEDF_ML::ml_tanh_qnl = false |
bool KEDF_ML::ml_tanhp = false |
bool KEDF_ML::ml_tanhp_nl = false |
bool KEDF_ML::ml_tanhq = false |
bool KEDF_ML::ml_tanhq_nl = false |
bool KEDF_ML::ml_tanhxi = false |
bool KEDF_ML::ml_tanhxi_nl = false |
bool KEDF_ML::ml_xi = false |
std::vector<std::vector<double> > KEDF_ML::nablaRho = {} |
int KEDF_ML::ninput = 0 |
int KEDF_ML::nkernel = 1 |
std::shared_ptr<NN_OFImpl> KEDF_ML::nn |
int KEDF_ML::nx = 0 |
int KEDF_ML::nx_tot = 0 |
std::vector<double> KEDF_ML::p = {} |
std::vector<std::vector<double> > KEDF_ML::pnl = {} |
const double KEDF_ML::pqcoef = 1.0 / (4.0 * std::pow(3*std::pow(M_PI, 2.0), 2.0/3.0)) |
std::vector<double> KEDF_ML::q = {} |
std::vector<std::vector<double> > KEDF_ML::qnl = {} |
std::vector<std::vector<double> > KEDF_ML::tanh_pnl = {} |
std::vector<std::vector<double> > KEDF_ML::tanh_qnl = {} |
std::vector<double> KEDF_ML::tanhp = {} |
std::vector<std::vector<double> > KEDF_ML::tanhp_nl = {} |
std::vector<double> KEDF_ML::tanhq = {} |
std::vector<std::vector<double> > KEDF_ML::tanhq_nl = {} |
std::vector<std::vector<double> > KEDF_ML::tanhxi = {} |
std::vector<std::vector<double> > KEDF_ML::tanhxi_nl = {} |
std::vector<std::vector<double> > KEDF_ML::xi = {} |