ABACUS develop
Atomic-orbital Based Ab-initio Computation at UStc
Loading...
Searching...
No Matches
vdwd3.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_H
8#define VDWD3_H
9
10#include "vdw.h"
11
12namespace vdw
13{
14
15class Vdwd3 : public Vdw
16{
17
18 public:
19 Vdwd3(const UnitCell &unit_in) : Vdw(unit_in) { }
20
21 ~Vdwd3() = default;
22
24 const Vdwd3Parameters &parameter() const { return para_; }
25
26 private:
28
29 std::vector<ModuleBase::Vector3<double>> lat_;
30 std::vector<int> iz_;
31 std::vector<ModuleBase::Vector3<double>> xyz_;
32 std::vector<int> rep_vdw_;
33 std::vector<int> rep_cn_;
34
35 void cal_energy() override;
36 void cal_force() override;
37 void cal_stress() override;
38
39 void init();
40
41 void set_criteria(double rthr, const std::vector<ModuleBase::Vector3<double>> &lat, std::vector<double> &tau_max);
42
43 std::vector<double> atom_kind();
44
45 void get_c6(int iat, int jat, double nci, double ncj, double &c6);
46
47 void pbc_ncoord(std::vector<double> &cn);
48
49 void pbc_three_body(const std::vector<int> &iz,
50 const std::vector<ModuleBase::Vector3<double>> &lat,
51 const std::vector<ModuleBase::Vector3<double>> &xyz,
52 const std::vector<int> &rep_cn,
53 const std::vector<double> &cc6ab,
54 double &eabc);
55
56 void pbc_gdisp(std::vector<ModuleBase::Vector3<double>> &g, ModuleBase::matrix &smearing_sigma);
57
58 void get_dc6_dcnij(int mxci, int mxcj, double cni, double cnj, int izi, int izj, int iat, int jat,
59 double &c6check, double &dc6i, double &dc6j);
60
61 int lin(int i1, int i2)
62 {
63 int idum1 = std::max(i1 + 1, i2 + 1);
64 int idum2 = std::min(i1 + 1, i2 + 1);
65 int res = idum2 + idum1 * (idum1 - 1) / 2 - 1;
66 return res;
67 }
68};
69
70} // namespace vdw
71
72#endif // VDWD3_H
3 elements vector
Definition vector3.h:22
Definition matrix.h:19
Definition unitcell.h:16
Definition vdw.h:21
Definition vdwd3_parameters.h:17
Definition vdwd3.h:16
Vdwd3Parameters & parameter()
Definition vdwd3.h:23
std::vector< int > iz_
Definition vdwd3.h:30
void cal_energy() override
Definition vdwd3.cpp:85
void get_dc6_dcnij(int mxci, int mxcj, double cni, double cnj, int izi, int izj, int iat, int jat, double &c6check, double &dc6i, double &dc6j)
Definition vdwd3.cpp:689
const Vdwd3Parameters & parameter() const
Definition vdwd3.h:24
void cal_stress() override
Definition vdwd3.cpp:287
void cal_force() override
Definition vdwd3.cpp:264
std::vector< ModuleBase::Vector3< double > > lat_
Definition vdwd3.h:29
std::vector< int > rep_cn_
Definition vdwd3.h:33
void pbc_three_body(const std::vector< int > &iz, const std::vector< ModuleBase::Vector3< double > > &lat, const std::vector< ModuleBase::Vector3< double > > &xyz, const std::vector< int > &rep_cn, const std::vector< double > &cc6ab, double &eabc)
Definition vdwd3.cpp:365
int lin(int i1, int i2)
Definition vdwd3.h:61
void set_criteria(double rthr, const std::vector< ModuleBase::Vector3< double > > &lat, std::vector< double > &tau_max)
Definition vdwd3.cpp:55
~Vdwd3()=default
Vdwd3Parameters para_
Definition vdwd3.h:27
std::vector< ModuleBase::Vector3< double > > xyz_
Definition vdwd3.h:31
void pbc_ncoord(std::vector< double > &cn)
Definition vdwd3.cpp:334
void pbc_gdisp(std::vector< ModuleBase::Vector3< double > > &g, ModuleBase::matrix &smearing_sigma)
Definition vdwd3.cpp:738
std::vector< double > atom_kind()
Definition vdwd3.cpp:70
void init()
Definition vdwd3.cpp:17
std::vector< int > rep_vdw_
Definition vdwd3.h:32
Vdwd3(const UnitCell &unit_in)
Definition vdwd3.h:19
void get_c6(int iat, int jat, double nci, double ncj, double &c6)
Definition vdwd3.cpp:307
Definition vdw.cpp:41