ABACUS develop
Atomic-orbital Based Ab-initio Computation at UStc
Loading...
Searching...
No Matches
vdwd3_parameters.h
Go to the documentation of this file.
1//==========================================================
2// AUTHOR : Yuyang Ji
3// DATE : 2019-04-22
4// UPDATE : 2021-4-19
5//==========================================================
6
7#ifndef VDWD3_PARAMETERS_H
8#define VDWD3_PARAMETERS_H
9
11#include "vdw_parameters.h"
12
13namespace vdw
14{
15
17{
18
19 public:
21
22 ~Vdwd3Parameters() = default;
23
30 void initial_parameters(const std::string& xc,
31 const Input_para& input,
32 std::ofstream* plog = nullptr); // for logging the parameter autoset
33
34 inline const std::string &version() const { return version_; }
35
36 inline bool abc() const { return abc_; }
37 inline double rthr2() const { return rthr2_; }
38 inline double cn_thr2() const { return cn_thr2_; }
39 inline double s6() const { return s6_; }
40 inline double rs6() const { return rs6_; }
41 inline double s18() const { return s18_; }
42 inline double rs18() const { return rs18_; }
43
44 inline const std::vector<int> &mxc() const { return mxc_; }
45 inline const std::vector<std::vector<std::vector<std::vector<std::vector<double>>>>> &c6ab() const { return c6ab_; }
46 inline const std::vector<double> &r2r4() const { return r2r4_; }
47 inline const std::vector<double> &rcov() { return rcov_; }
48 inline const std::vector<std::vector<double>> &r0ab() { return r0ab_; }
49
50 inline double k1() const { return k1_; }
51 inline double k2() const { return k2_; }
52 inline double k3() const { return k3_; }
53 inline double alp6() const { return alp6_; }
54 inline double alp8() const { return alp8_; }
55 inline double alp10() const { return alp10_; }
56
57 private:
58 std::string version_;
59
60 bool abc_=false; // third-order term?
61 double rthr2_=0.0; // R^2 distance neglect threshold (important for speed in case of large systems) (a.u.)
62 double cn_thr2_=0.0; // R^2 distance to cutoff for CN_calculation (a.u.)
63 double s6_=0.0;
64 double rs6_=0.0;
65 double s18_=0.0;
66 double rs18_=0.0;
67
68 static constexpr size_t max_elem_ = 94;
69 static constexpr double k1_ = 16.0, k2_ = 4.0 / 3.0, k3_ = -4.0;
70 static constexpr double alp6_ = 14.0, alp8_ = alp6_ + 2, alp10_ = alp8_ + 2;
71
72 std::vector<int> mxc_;
73 std::vector<std::vector<std::vector<std::vector<std::vector<double>>>>> c6ab_;
74 std::vector<double> r2r4_;
75 std::vector<double> rcov_;
76 std::vector<std::vector<double>> r0ab_;
77
78 static void _vdwd3_autoset_xcparam(const std::string& xc_in,
79 const std::string& d3method,
80 const std::string& s6_in,
81 const std::string& s8_in,
82 const std::string& a1_in,
83 const std::string& a2_in,
84 double& s6,
85 double& s8,
86 double& a1,
87 double& a2,
88 std::ofstream* plog = nullptr);
89
90 static std::string _vdwd3_xcname(const std::string& xcpattern);
91
92 void init_C6();
93 void init_r2r4();
94 void init_rcov();
95 void init_r0ab();
96
97 int limit(int &i);
98};
99
100} // namespace vdw
101
102#endif // VDWD3_PARAMETERS_H
Definition vdw_parameters.h:12
Definition vdwd3_parameters.h:17
double s6() const
Definition vdwd3_parameters.h:39
std::string version_
Definition vdwd3_parameters.h:58
static constexpr double k2_
Definition vdwd3_parameters.h:69
double alp8() const
Definition vdwd3_parameters.h:54
static std::string _vdwd3_xcname(const std::string &xcpattern)
Definition vdwd3_autoset_xcname.cpp:383
bool abc_
Definition vdwd3_parameters.h:60
const std::vector< std::vector< double > > & r0ab()
Definition vdwd3_parameters.h:48
const std::vector< std::vector< std::vector< std::vector< std::vector< double > > > > > & c6ab() const
Definition vdwd3_parameters.h:45
const std::vector< int > & mxc() const
Definition vdwd3_parameters.h:44
static constexpr size_t max_elem_
Definition vdwd3_parameters.h:68
int limit(int &i)
Definition vdwd3_parameters.cpp:64
double rs18() const
Definition vdwd3_parameters.h:42
const std::vector< double > & rcov()
Definition vdwd3_parameters.h:47
double k1() const
Definition vdwd3_parameters.h:50
void initial_parameters(const std::string &xc, const Input_para &input, std::ofstream *plog=nullptr)
initialize the parameter by either input (from user setting) or autoset by dft XC
Definition vdwd3_parameters.cpp:13
static constexpr double alp8_
Definition vdwd3_parameters.h:70
double s18_
Definition vdwd3_parameters.h:65
double s6_
Definition vdwd3_parameters.h:63
double k3() const
Definition vdwd3_parameters.h:52
void init_C6()
Definition vdwd3_parameters_tab.cpp:12
double rs6() const
Definition vdwd3_parameters.h:40
double alp6() const
Definition vdwd3_parameters.h:53
double rthr2_
Definition vdwd3_parameters.h:61
void init_r0ab()
Definition vdwd3_parameters_tab.cpp:32476
const std::string & version() const
Definition vdwd3_parameters.h:34
double cn_thr2_
Definition vdwd3_parameters.h:62
std::vector< std::vector< std::vector< std::vector< std::vector< double > > > > > c6ab_
Definition vdwd3_parameters.h:73
double rs18_
Definition vdwd3_parameters.h:66
double alp10() const
Definition vdwd3_parameters.h:55
Vdwd3Parameters()
Definition vdwd3_parameters.h:20
static constexpr double k3_
Definition vdwd3_parameters.h:69
double rthr2() const
Definition vdwd3_parameters.h:37
double s18() const
Definition vdwd3_parameters.h:41
std::vector< std::vector< double > > r0ab_
Definition vdwd3_parameters.h:76
std::vector< double > rcov_
Definition vdwd3_parameters.h:75
static constexpr double k1_
Definition vdwd3_parameters.h:69
double cn_thr2() const
Definition vdwd3_parameters.h:38
static constexpr double alp6_
Definition vdwd3_parameters.h:70
const std::vector< double > & r2r4() const
Definition vdwd3_parameters.h:46
void init_r2r4()
Definition vdwd3_parameters_tab.cpp:32426
double k2() const
Definition vdwd3_parameters.h:51
std::vector< int > mxc_
Definition vdwd3_parameters.h:72
double rs6_
Definition vdwd3_parameters.h:64
~Vdwd3Parameters()=default
bool abc() const
Definition vdwd3_parameters.h:36
void init_rcov()
Definition vdwd3_parameters_tab.cpp:32451
std::vector< double > r2r4_
Definition vdwd3_parameters.h:74
static void _vdwd3_autoset_xcparam(const std::string &xc_in, const std::string &d3method, const std::string &s6_in, const std::string &s8_in, const std::string &a1_in, const std::string &a2_in, double &s6, double &s8, double &a1, double &a2, std::ofstream *plog=nullptr)
Get DFT-D3 parameters. If if there are parameters defined, then it will overwrite the search result....
Definition vdwd3_autoset_xcparam.cpp:459
static constexpr double alp10_
Definition vdwd3_parameters.h:70
Definition vdw.cpp:41
Definition input_parameter.h:12