ABACUS develop
Atomic-orbital Based Ab-initio Computation at UStc
Loading...
Searching...
No Matches
deepks_basic.h
Go to the documentation of this file.
1#ifndef DEEPKS_BASIC_H
2#define DEEPKS_BASIC_H
3
4#ifdef __MLALGO
5#include "LCAO_deepks_io.h"
9
10#include <torch/script.h>
11#include <torch/torch.h>
12
14{
15//------------------------
16// deepks_basic.cpp
17//------------------------
18
19// The file contains 2 subroutines:
20// 1. load_model : loads model for applying V_delta
21// 2. cal_gevdm : d(des)/d(pdm), calculated using torch::autograd::grad
22// 3. cal_edelta_gedm : calculates E_delta and d(E_delta)/d(pdm)
23// this is the term V(D) that enters the expression V_delta = |alpha>V(D)<alpha|
24// caculated using torch::autograd::grad
25// 4. check_gedm : prints gedm for checking
26// 5. cal_edelta_gedm_equiv : calculates E_delta and d(E_delta)/d(pdm) for equivariant version
27// 6. prepare_atom : prepares atom tensor for output as deepks_out_labels = 2
28// 7. prepare_box : prepares box tensor for output as deepks_out_labels = 2
29
30// load the trained neural network models
31void load_model(const std::string& model_file, torch::jit::script::Module& model);
32
33// calculate gevdm
34void cal_gevdm(const int nat,
35 const int inlmax,
36 const std::vector<int>& inl2l,
37 const std::vector<torch::Tensor>& pdm,
38 std::vector<torch::Tensor>& gevdm);
39
41void cal_edelta_gedm(const int nat,
42 const int inlmax,
43 const int des_per_atom,
44 const std::vector<int>& inl2l,
45 const std::vector<torch::Tensor>& descriptor,
46 const std::vector<torch::Tensor>& pdm,
47 torch::jit::script::Module& model_deepks,
48 double** gedm,
49 double& E_delta);
50void check_gedm(const int inlmax, const std::vector<int>& inl2l, double** gedm);
51void cal_edelta_gedm_equiv(const int nat,
52 const int lmaxd,
53 const int nmaxd,
54 const int inlmax,
55 const int des_per_atom,
56 const std::vector<int>& inl2l,
57 const std::vector<torch::Tensor>& descriptor,
58 double** gedm,
59 double& E_delta,
60 const int rank);
61
62void prepare_atom(const UnitCell& ucell, torch::Tensor& atom_out);
63void prepare_box(const UnitCell& ucell, torch::Tensor& box_out);
64} // namespace DeePKS_domain
65#endif
66#endif
Definition unitcell.h:16
Definition deepks_basic.h:14
void check_gedm(const int inlmax, const std::vector< int > &inl2l, double **gedm)
Definition deepks_basic.cpp:221
void load_model(const std::string &model_file, torch::jit::script::Module &model)
Definition deepks_basic.cpp:59
void cal_gevdm(const int nat, const int inlmax, const std::vector< int > &inl2l, const std::vector< torch::Tensor > &pdm, std::vector< torch::Tensor > &gevdm)
Definition deepks_basic.cpp:14
void prepare_box(const UnitCell &ucell, torch::Tensor &box_out)
Definition deepks_basic.cpp:263
void cal_edelta_gedm(const int nat, const int inlmax, const int des_per_atom, const std::vector< int > &inl2l, const std::vector< torch::Tensor > &descriptor, const std::vector< torch::Tensor > &pdm, torch::jit::script::Module &model_deepks, double **gedm, double &E_delta)
calculate partial of energy correction to descriptors
Definition deepks_basic.cpp:171
void cal_edelta_gedm_equiv(const int nat, const int lmaxd, const int nmaxd, const int inlmax, const int des_per_atom, const std::vector< int > &inl2l, const std::vector< torch::Tensor > &descriptor, double **gedm, double &E_delta, const int rank)
Definition deepks_basic.cpp:126
void prepare_atom(const UnitCell &ucell, torch::Tensor &atom_out)
Definition deepks_basic.cpp:241