ABACUS develop
Atomic-orbital Based Ab-initio Computation at UStc
Loading...
Searching...
No Matches
ORB_atomic.h
Go to the documentation of this file.
1#ifndef NUMERICAL_ORBITAL_H
2#define NUMERICAL_ORBITAL_H
3
4#include <string>
5
8#include "ORB_atomic_lm.h"
9
11{
12public:
13 //==========================================================
14 // It's about two atoms relations, thread-safe interface
15 //==========================================================
16 double distance;
18 ModuleBase::Vector3<double> R2; //three-dimesion-coordinate of R
20
21 double& get_distance()
22 {
23 if(distance < 0.0) ModuleBase::WARNING_QUIT("NUMERICAL_ORBITAL","distance should be above zero!");
24 return distance;
25 }
26
27 double getX() { return R2.x - R1.x ; }
28 double getY() { return R2.y - R1.y ; }
29 double getZ() { return R2.z - R1.z ; }
33
35 {
36 R1 = R1_in;
37 R2 = R2_in;
38 dR = R1-R2;
39 distance = dR.norm();
40 }
41};
42
52{
53 friend class LCAO_Orbitals;
54
55public:
56
59
60 const int& getLmax() const { return this->lmax; }
61 const double& getRcut () const {return this->rcut; }
62 const int& getType() const { return this->type; }
63 const int& getTotal_nchi() const { return this->total_nchi; }
64 const int& getNchi(const int l) const { return this->nchi[l]; }
65 const std::string& getLabel() const { return this->label; }
66
67 const inline Numerical_Orbital_Lm& PhiLN( const int &L, const int &N)const
68 {
69 return this->phiLN[ this->find_chi(L, N) ];
70 }
71
73 static double& get_distance()
74 {
75 return NOAR.get_distance();
76 }
77
78 static double getX() { return NOAR.getX() ; }
79 static double getY() { return NOAR.getY() ; }
80 static double getZ() { return NOAR.getZ() ; }
84
89 const int& type_in,
90 const std::string& label_in,
91 const int& lmax_in,
92 const int* nchi_in,
93 const int& total_nchi);
94
96 {
97 NOAR.set_position(R1_in, R2_in);
98 }
99
100 std::vector<Numerical_Orbital_Lm>& chi() { return this->phiLN; }
101
102private:
103
104 //==========================================================
105 // MEMBER FUNCTION :
106 // NAME : label (atom type)
107 // NAME : lmax( max value of L angular momentum)
108 // NAME : nchi( number of chi for each L)
109 // NAME : total_nchi(total chi for this type of atom, total number of NAOs)
110 // NAME : max_nchi( max chi for certain L)
111 // NAME : find_chi(lmax+1, max_nchi).
112 //===========================================================
113 std::string label;
114
115 int type;
116 int lmax;
117 std::vector<int> nchi;
121 double rcut;
122
123 std::vector<Numerical_Orbital_Lm> phiLN;// length: total_nchi (only store radial function )
124
125 //==========================================================
126 // Keep the old interface
127 //==========================================================
129};
130
131#endif
Definition ORB_read.h:19
Integer array.
Definition intarray.h:20
3 elements vector
Definition vector3.h:22
T x
Definition vector3.h:24
T norm(void) const
Get the norm of a Vector3.
Definition vector3.h:187
T y
Definition vector3.h:25
T z
Definition vector3.h:26
Definition ORB_atomic.h:11
double getY()
Definition ORB_atomic.h:28
ModuleBase::Vector3< double > & getR1()
Definition ORB_atomic.h:30
double distance
Definition ORB_atomic.h:16
ModuleBase::Vector3< double > R2
Definition ORB_atomic.h:18
ModuleBase::Vector3< double > R1
Definition ORB_atomic.h:17
ModuleBase::Vector3< double > & getR2()
Definition ORB_atomic.h:31
double & get_distance()
Definition ORB_atomic.h:21
ModuleBase::Vector3< double > & getdR()
Definition ORB_atomic.h:32
ModuleBase::Vector3< double > dR
Definition ORB_atomic.h:19
double getZ()
Definition ORB_atomic.h:29
void set_position(const ModuleBase::Vector3< double > &R1_in, const ModuleBase::Vector3< double > &R2_in)
Definition ORB_atomic.h:34
double getX()
Definition ORB_atomic.h:27
Definition ORB_atomic_lm.h:22
Definition ORB_atomic.h:52
const int & getLmax() const
Definition ORB_atomic.h:60
static double getX()
Definition ORB_atomic.h:78
const std::string & getLabel() const
Definition ORB_atomic.h:65
std::string label
Definition ORB_atomic.h:113
const double & getRcut() const
Definition ORB_atomic.h:61
std::vector< Numerical_Orbital_Lm > & chi()
Definition ORB_atomic.h:100
static ModuleBase::Vector3< double > & getR2()
Definition ORB_atomic.h:82
const int & getNchi(const int l) const
Definition ORB_atomic.h:64
static ModuleBase::Vector3< double > & getdR()
Definition ORB_atomic.h:83
int type
Definition ORB_atomic.h:115
int total_nchi
Definition ORB_atomic.h:118
std::vector< Numerical_Orbital_Lm > phiLN
Definition ORB_atomic.h:123
const int & getTotal_nchi() const
Definition ORB_atomic.h:63
std::vector< int > nchi
Definition ORB_atomic.h:117
static ModuleBase::Vector3< double > & getR1()
Definition ORB_atomic.h:81
ModuleBase::IntArray find_chi
Definition ORB_atomic.h:120
int max_nchi
Definition ORB_atomic.h:119
static double getZ()
Definition ORB_atomic.h:80
~Numerical_Orbital()
Definition ORB_atomic.cpp:15
Numerical_Orbital()
Definition ORB_atomic.cpp:6
int lmax
Definition ORB_atomic.h:116
double rcut
Definition ORB_atomic.h:121
static double & get_distance()
about the distance between two atoms.
Definition ORB_atomic.h:73
const int & getType() const
Definition ORB_atomic.h:62
void set_orbital_info(const int &type_in, const std::string &label_in, const int &lmax_in, const int *nchi_in, const int &total_nchi)
Definition ORB_atomic.cpp:19
static Numerical_Orbital_AtomRelation NOAR
Definition ORB_atomic.h:128
static void set_position(const ModuleBase::Vector3< double > &R1_in, const ModuleBase::Vector3< double > &R2_in)
Definition ORB_atomic.h:95
const Numerical_Orbital_Lm & PhiLN(const int &L, const int &N) const
Definition ORB_atomic.h:67
static double getY()
Definition ORB_atomic.h:79
#define N
Definition exp.cpp:24
void WARNING_QUIT(const std::string &, const std::string &)
Combine the functions of WARNING and QUIT.
Definition test_delley.cpp:14