ABACUS develop
Atomic-orbital Based Ab-initio Computation at UStc
Loading...
Searching...
No Matches
pauli_potential.h
Go to the documentation of this file.
1#ifndef PAULI_POTENTIAL_H
2#define PAULI_POTENTIAL_H
3
4#include <torch/torch.h>
5#include "./input.h"
6#include "./data.h"
7#include "./kernel.h"
8#include "./grid.h"
9
11
12public:
13 void init(const Input &input, const int ninput, const std::vector<std::string> &descriptor_type, const std::vector<int> &kernel_index);
14
15 int fftdim = 0;
16 int istru = 0;
17
18 std::map<std::string, std::vector<int>> descriptor2kernel = {};
19 std::map<std::string, std::vector<int>> descriptor2index = {};
20
21 // semi-local descriptors
22 bool ml_gamma = false;
23 bool ml_p = false;
24 bool ml_q = false;
25 bool ml_tanhp = false;
26 bool ml_tanhq = false;
27 // non-local descriptors
28 bool ml_gammanl = false;
29 bool ml_pnl = false;
30 bool ml_qnl = false;
31 bool ml_xi = false;
32 bool ml_tanhxi = false;
33 bool ml_tanhxi_nl = false;
34 bool ml_tanh_pnl = false;
35 bool ml_tanh_qnl = false;
36 bool ml_tanhp_nl = false;
37 bool ml_tanhq_nl = false;
38
39 double chi_p = 1.;
40 double chi_q = 1.;
41 double* chi_xi = nullptr;
42 double* chi_pnl = nullptr;
43 double* chi_qnl = nullptr;
44
45 torch::Tensor get_potential(
46 const int istru,
47 const Data &data,
48 const torch::Tensor &F,
49 const torch::Tensor &gradient,
50 const Kernel *kernels,
51 const Grid &grid
52 );
53private:
54
55 torch::Tensor potGammaTerm(
56 const torch::Tensor &gamma,
57 const torch::Tensor &gradient
58 );
59 torch::Tensor potPTerm1(
60 const torch::Tensor &p,
61 const torch::Tensor &gradient
62 );
63 torch::Tensor potQTerm1(
64 const torch::Tensor &q,
65 const torch::Tensor &gradient
66 );
67 torch::Tensor potGammanlTerm(
68 const torch::Tensor &rho,
69 const torch::Tensor &gamma,
70 const Kernel *kernels,
71 // const torch::Tensor &kernel,
72 const torch::Tensor &tauTF,
73 const torch::Tensor &gradient
74 );
75 torch::Tensor potPPnlTerm(
76 const torch::Tensor &rho,
77 const torch::Tensor &nablaRho,
78 const torch::Tensor &p,
79 const Kernel *kernels,
80 // const torch::Tensor &kernel,
81 const torch::Tensor &tauTF,
82 const torch::Tensor &gradient,
83 const std::vector<torch::Tensor> &grid
84 );
85 torch::Tensor potQQnlTerm(
86 const torch::Tensor &rho,
87 const torch::Tensor &q,
88 const Kernel *kernels,
89 // const torch::Tensor &kernel,
90 const torch::Tensor &tauTF,
91 const torch::Tensor &gradient,
92 const torch::Tensor &gg
93 );
94
95
96 torch::Tensor potXiTerm1(
97 const torch::Tensor &rho,
98 const std::vector<torch::Tensor> &xi,
99 const torch::Tensor &gradient
100 );
101 torch::Tensor potTanhxiTerm1(
102 const torch::Tensor &rho,
103 const std::vector<torch::Tensor> &xi,
104 const std::vector<torch::Tensor> &tanhxi,
105 const torch::Tensor &gradient
106 );
107 torch::Tensor potTanhpTerm1(
108 const torch::Tensor &p,
109 const torch::Tensor &tanhp,
110 const torch::Tensor &gradient
111 );
112 torch::Tensor potTanhqTerm1(
113 const torch::Tensor &q,
114 const torch::Tensor &tanhq,
115 const torch::Tensor &gradient
116 );
117 torch::Tensor potXinlTerm(
118 const torch::Tensor &rho,
119 const Kernel *kernels,
120 // const torch::Tensor &kernel,
121 const torch::Tensor &tauTF,
122 const torch::Tensor &gradient
123 );
124 torch::Tensor potTanhxinlTerm(
125 const torch::Tensor &rho,
126 const std::vector<torch::Tensor> &tanhxi,
127 const Kernel *kernels,
128 // const torch::Tensor &kernel,
129 const torch::Tensor &tauTF,
130 const torch::Tensor &gradient
131 );
132 torch::Tensor potTanhxi_nlTerm(
133 const torch::Tensor &rho,
134 const std::vector<torch::Tensor> &xi,
135 const std::vector<torch::Tensor> &tanhxi,
136 const Kernel *kernels,
137 // const torch::Tensor &kernel,
138 const torch::Tensor &tauTF,
139 const torch::Tensor &gradient
140 );
141 torch::Tensor potTanhpTanh_pnlTerm(
142 const torch::Tensor &rho,
143 const torch::Tensor &nablaRho,
144 const torch::Tensor &p,
145 const torch::Tensor &tanhp,
146 const std::vector<torch::Tensor> &tanh_pnl,
147 const Kernel *kernels,
148 // const torch::Tensor &kernel,
149 const torch::Tensor &tauTF,
150 const torch::Tensor &gradient,
151 const std::vector<torch::Tensor> &grid
152 );
153 torch::Tensor potTanhqTanh_qnlTerm(
154 const torch::Tensor &rho,
155 const torch::Tensor &q,
156 const torch::Tensor &tanhq,
157 const std::vector<torch::Tensor> &tanh_qnl,
158 const Kernel *kernels,
159 // const torch::Tensor &kernel,
160 const torch::Tensor &tauTF,
161 const torch::Tensor &gradient,
162 const torch::Tensor &gg
163 );
164 torch::Tensor potTanhpTanhp_nlTerm(
165 const torch::Tensor &rho,
166 const torch::Tensor &nablaRho,
167 const torch::Tensor &p,
168 const torch::Tensor &tanhp,
169 const Kernel *kernels,
170 // const torch::Tensor &kernel,
171 const torch::Tensor &tauTF,
172 const torch::Tensor &gradient,
173 const std::vector<torch::Tensor> &grid
174 );
175 torch::Tensor potTanhqTanhq_nlTerm(
176 const torch::Tensor &rho,
177 const torch::Tensor &q,
178 const torch::Tensor &tanhq,
179 const Kernel *kernels,
180 // const torch::Tensor &kernel,
181 const torch::Tensor &tauTF,
182 const torch::Tensor &gradient,
183 const torch::Tensor &gg
184 );
185
186 // Tools for getting potential
187 torch::Tensor divergence(
188 const torch::Tensor &input,
189 const std::vector<torch::Tensor> &grid
190 );
191 torch::Tensor Laplacian(
192 const torch::Tensor &input,
193 const torch::Tensor &gg
194 );
195 torch::Tensor dtanh(
196 const torch::Tensor &tanhx,
197 const double chi
198 );
199
200 const double cTF = 3.0/10.0 * 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)
201 const double pqcoef = 1.0 / (4.0 * std::pow(3*std::pow(M_PI, 2.0), 2.0/3.0)); // coefficient of p and q
202};
203#endif
Definition data.h:9
Definition input.h:7
Definition kernel.h:7
Definition pauli_potential.h:10
bool ml_qnl
Definition pauli_potential.h:30
torch::Tensor potXiTerm1(const torch::Tensor &rho, const std::vector< torch::Tensor > &xi, const torch::Tensor &gradient)
Definition pauli_potential.cpp:310
torch::Tensor potTanhpTanh_pnlTerm(const torch::Tensor &rho, const torch::Tensor &nablaRho, const torch::Tensor &p, const torch::Tensor &tanhp, const std::vector< torch::Tensor > &tanh_pnl, const Kernel *kernels, const torch::Tensor &tauTF, const torch::Tensor &gradient, const std::vector< torch::Tensor > &grid)
Definition pauli_potential.cpp:431
torch::Tensor potTanhqTanh_qnlTerm(const torch::Tensor &rho, const torch::Tensor &q, const torch::Tensor &tanhq, const std::vector< torch::Tensor > &tanh_qnl, const Kernel *kernels, const torch::Tensor &tauTF, const torch::Tensor &gradient, const torch::Tensor &gg)
Definition pauli_potential.cpp:476
bool ml_tanhxi
Definition pauli_potential.h:32
torch::Tensor divergence(const torch::Tensor &input, const std::vector< torch::Tensor > &grid)
Definition pauli_potential.cpp:599
torch::Tensor potTanhxinlTerm(const torch::Tensor &rho, const std::vector< torch::Tensor > &tanhxi, const Kernel *kernels, const torch::Tensor &tauTF, const torch::Tensor &gradient)
Definition pauli_potential.cpp:379
bool ml_pnl
Definition pauli_potential.h:29
bool ml_tanh_qnl
Definition pauli_potential.h:35
double chi_p
Definition pauli_potential.h:39
torch::Tensor get_potential(const int istru, const Data &data, const torch::Tensor &F, const torch::Tensor &gradient, const Kernel *kernels, const Grid &grid)
Definition pauli_potential.cpp:67
std::map< std::string, std::vector< int > > descriptor2index
Definition pauli_potential.h:19
const double cTF
Definition pauli_potential.h:200
torch::Tensor potTanhxi_nlTerm(const torch::Tensor &rho, const std::vector< torch::Tensor > &xi, const std::vector< torch::Tensor > &tanhxi, const Kernel *kernels, const torch::Tensor &tauTF, const torch::Tensor &gradient)
Definition pauli_potential.cpp:402
bool ml_p
Definition pauli_potential.h:23
std::map< std::string, std::vector< int > > descriptor2kernel
Definition pauli_potential.h:18
torch::Tensor potGammanlTerm(const torch::Tensor &rho, const torch::Tensor &gamma, const Kernel *kernels, const torch::Tensor &tauTF, const torch::Tensor &gradient)
Definition pauli_potential.cpp:202
bool ml_q
Definition pauli_potential.h:24
int istru
Definition pauli_potential.h:16
torch::Tensor dtanh(const torch::Tensor &tanhx, const double chi)
Definition pauli_potential.cpp:619
double * chi_pnl
Definition pauli_potential.h:42
int fftdim
Definition pauli_potential.h:15
bool ml_tanhq
Definition pauli_potential.h:26
bool ml_tanhq_nl
Definition pauli_potential.h:37
double * chi_xi
Definition pauli_potential.h:41
void init(const Input &input, const int ninput, const std::vector< std::string > &descriptor_type, const std::vector< int > &kernel_index)
Definition pauli_potential.cpp:3
bool ml_gamma
Definition pauli_potential.h:22
bool ml_xi
Definition pauli_potential.h:31
torch::Tensor potPPnlTerm(const torch::Tensor &rho, const torch::Tensor &nablaRho, const torch::Tensor &p, const Kernel *kernels, const torch::Tensor &tauTF, const torch::Tensor &gradient, const std::vector< torch::Tensor > &grid)
Definition pauli_potential.cpp:225
torch::Tensor potTanhpTanhp_nlTerm(const torch::Tensor &rho, const torch::Tensor &nablaRho, const torch::Tensor &p, const torch::Tensor &tanhp, const Kernel *kernels, const torch::Tensor &tauTF, const torch::Tensor &gradient, const std::vector< torch::Tensor > &grid)
Definition pauli_potential.cpp:516
torch::Tensor potPTerm1(const torch::Tensor &p, const torch::Tensor &gradient)
Definition pauli_potential.cpp:186
bool ml_tanhp_nl
Definition pauli_potential.h:36
torch::Tensor potQQnlTerm(const torch::Tensor &rho, const torch::Tensor &q, const Kernel *kernels, const torch::Tensor &tauTF, const torch::Tensor &gradient, const torch::Tensor &gg)
Definition pauli_potential.cpp:271
double chi_q
Definition pauli_potential.h:40
bool ml_tanhp
Definition pauli_potential.h:25
const double pqcoef
Definition pauli_potential.h:201
torch::Tensor potGammaTerm(const torch::Tensor &gamma, const torch::Tensor &gradient)
Definition pauli_potential.cpp:178
torch::Tensor potTanhpTerm1(const torch::Tensor &p, const torch::Tensor &tanhp, const torch::Tensor &gradient)
Definition pauli_potential.cpp:340
torch::Tensor potTanhqTerm1(const torch::Tensor &q, const torch::Tensor &tanhq, const torch::Tensor &gradient)
Definition pauli_potential.cpp:349
double * chi_qnl
Definition pauli_potential.h:43
bool ml_tanhxi_nl
Definition pauli_potential.h:33
torch::Tensor potTanhqTanhq_nlTerm(const torch::Tensor &rho, const torch::Tensor &q, const torch::Tensor &tanhq, const Kernel *kernels, const torch::Tensor &tauTF, const torch::Tensor &gradient, const torch::Tensor &gg)
Definition pauli_potential.cpp:560
torch::Tensor potTanhxiTerm1(const torch::Tensor &rho, const std::vector< torch::Tensor > &xi, const std::vector< torch::Tensor > &tanhxi, const torch::Tensor &gradient)
Definition pauli_potential.cpp:324
bool ml_tanh_pnl
Definition pauli_potential.h:34
torch::Tensor Laplacian(const torch::Tensor &input, const torch::Tensor &gg)
Definition pauli_potential.cpp:614
bool ml_gammanl
Definition pauli_potential.h:28
torch::Tensor potQTerm1(const torch::Tensor &q, const torch::Tensor &gradient)
Definition pauli_potential.cpp:194
torch::Tensor potXinlTerm(const torch::Tensor &rho, const Kernel *kernels, const torch::Tensor &tauTF, const torch::Tensor &gradient)
Definition pauli_potential.cpp:358
Definition batch.h:6