ABACUS develop
Atomic-orbital Based Ab-initio Computation at UStc
Loading...
Searching...
No Matches
kedf_ml.h
Go to the documentation of this file.
1#ifndef KEDF_ML_H
2#define KEDF_ML_H
3
4#ifdef __MLALGO
5
6#include "ml_base.h"
7
8class KEDF_ML : public ML_Base
9{
10public:
12 {
13 this->energy_prefactor = 3. /10. * std::pow(3*std::pow(M_PI, 2.0), 2.0/3.0) * 2; // 10/3*(3*pi^2)^{2/3}, multiply by 2 to convert unit from Hartree to Ry, finally in Ry*Bohr^(-2)
14 this->energy_exponent = 5. / 3.;
15 // this->stress.create(3,3);
16 }
17
18 void set_para(
19 const int nx,
20 const double dV,
21 const double nelec,
22 const double tf_weight,
23 const double vw_weight,
24 const double chi_p,
25 const double chi_q,
26 const std::vector<double> &chi_xi,
27 const std::vector<double> &chi_pnl,
28 const std::vector<double> &chi_qnl,
29 const int &nkernel,
30 const std::vector<int> &kernel_type,
31 const std::vector<double> &kernel_scaling,
32 const std::vector<double> &yukawa_alpha,
33 const std::vector<std::string> &kernel_file,
34 const bool &of_ml_gamma,
35 const bool &of_ml_p,
36 const bool &of_ml_q,
37 const bool &of_ml_tanhp,
38 const bool &of_ml_tanhq,
39 const std::vector<int> &of_ml_gammanl,
40 const std::vector<int> &of_ml_pnl,
41 const std::vector<int> &of_ml_qnl,
42 const std::vector<int> &of_ml_xi,
43 const std::vector<int> &of_ml_tanhxi,
44 const std::vector<int> &of_ml_tanhxi_nl,
45 const std::vector<int> &of_ml_tanh_pnl,
46 const std::vector<int> &of_ml_tanh_qnl,
47 const std::vector<int> &of_ml_tanhp_nl,
48 const std::vector<int> &of_ml_tanhq_nl,
49 const std::string device_inpt,
50 ModulePW::PW_Basis *pw_rho);
51
52 double get_energy(const double * const * prho, ModulePW::PW_Basis *pw_rho);
53 // double get_energy_density(const double * const *prho, int is, int ir, ModulePW::PW_Basis *pw_rho);
54 void ml_potential(const double * const * prho, ModulePW::PW_Basis *pw_rho, ModuleBase::matrix &rpotential);
55 // void get_stress(double cellVol, const double * const * prho, ModulePW::PW_Basis *pw_rho, double vw_weight);
56
57 // output all parameters
58 void generateTrainData(const double * const *prho, ModulePW::PW_Basis *pw_rho, const double *veff);
59 void localTest(const double * const *prho, ModulePW::PW_Basis *pw_rho);
60
61 double ml_energy = 0.;
62 // ModuleBase::matrix stress;
63
64 // maps
65 void init_data(
66 const int &nkernel,
67 const bool &of_ml_gamma,
68 const bool &of_ml_p,
69 const bool &of_ml_q,
70 const bool &of_ml_tanhp,
71 const bool &of_ml_tanhq,
72 const std::vector<int> &of_ml_gammanl_,
73 const std::vector<int> &of_ml_pnl,
74 const std::vector<int> &of_ml_qnl,
75 const std::vector<int> &of_ml_xi,
76 const std::vector<int> &of_ml_tanhxi,
77 const std::vector<int> &of_ml_tanhxi_nl,
78 const std::vector<int> &of_ml_tanh_pnl,
79 const std::vector<int> &of_ml_tanh_qnl,
80 const std::vector<int> &of_ml_tanhp_nl,
81 const std::vector<int> &of_ml_tanhq_nl
82 );
83};
84
85#endif
86#endif
Definition kedf_ml.h:9
void generateTrainData(const double *const *prho, ModulePW::PW_Basis *pw_rho, const double *veff)
Generate training data for ML KEDF.
Definition kedf_ml.cpp:189
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:154
KEDF_ML()
Definition kedf_ml.h:11
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:9
void localTest(const double *const *prho, ModulePW::PW_Basis *pw_rho)
For test.
Definition kedf_ml.cpp:219
double get_energy(const double *const *prho, ModulePW::PW_Basis *pw_rho)
Get the energy of ML KEDF.
Definition kedf_ml.cpp:126
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
double ml_energy
Definition kedf_ml.h:61
Definition ml_base.h:17
int nkernel
Definition ml_base.h:116
double chi_q
Definition ml_base.h:91
double dV
Definition ml_base.h:69
int nx
Definition ml_base.h:68
std::vector< double > chi_pnl
Definition ml_base.h:99
std::vector< double > chi_qnl
Definition ml_base.h:100
double energy_prefactor
Definition ml_base.h:75
std::vector< double > chi_xi
Definition ml_base.h:89
double energy_exponent
Definition ml_base.h:76
double chi_p
Definition ml_base.h:90
Definition matrix.h:18
A class which can convert a function of "r" to the corresponding linear superposition of plane waves ...
Definition pw_basis.h:56