ABACUS develop
Atomic-orbital Based Ab-initio Computation at UStc
Loading...
Searching...
No Matches
radial_set.h
Go to the documentation of this file.
1#ifndef RADIAL_SET_H_
2#define RADIAL_SET_H_
3
4#include <map>
5#include <memory>
6#include <string>
7#include <utility>
8
13
26{
27 public:
28 RadialSet() = default;
29 RadialSet(const RadialSet&);
31 virtual RadialSet* clone() const = 0;
32
33 virtual ~RadialSet();
34
43 // FIXME The following functions are not pure virtual because each
44 // derived class may not need all of them. However, it is not a good
45 // design. Such functions will be removed in the future; their
46 // functionalities will be moved to the constructors of corresponding
47 // derived classes.
48
50
56 virtual void build(const std::string&,
57 const int = 0,
58 std::ofstream* const = nullptr,
59 const int = 0
60 ) {}
61
68 virtual void build(const Numerical_Nonlocal&,
69 const int = 0,
70 std::ofstream* const = nullptr
71 ) {}
72
79 virtual void build(const int = 0,
80 const double = 1.0,
81 const bool = false,
82 const int = 0,
83 const double = 10.0,
84 const double = 0.01,
85 const double = 1e-6,
86 const int = 0,
87 const std::string = "",
88 const std::string = "minimal-valence",
89 std::ofstream* const = nullptr
90 ) {}
91
98 virtual void build(const std::string&,
99 const int,
100 const double,
101 const double,
102 std::ofstream* const = nullptr,
103 const int = 0
104 ) {}
105
113 virtual void build(const int,
114 const int,
115 const double,
116 const double = 0.1,
117 const double = 0.01,
118 const int = 0,
119 std::ofstream* = nullptr,
120 const int = 0
121 ) {};
122
134 void write_abacus_orb(const std::string&,
135 const int = 0) const;
136
138
145 const int nk_legacy = 4005, // equivalent to lcao_ecut = 1600
146 const double lcao_dk = 0.01
147 ) const;
148
153 const std::string& symbol() const { return symbol_; }
154 int itype() const { return itype_; }
155 int lmax() const { return lmax_; }
156 double rcut_max() const { return rcut_max_; }
157
158 int nzeta(const int l) const { return (l >= 0 && l <= lmax_) ? nzeta_[l] : 0; }
159 int nzeta_max() const { return nzeta_max_; }
160 int nchi() const { return nchi_; }
161
162 const NumericalRadial& chi(const int l, const int izeta);
163 const NumericalRadial* cbegin() const { return chi_; }
164 const NumericalRadial* cend() const { return chi_ + nchi_; }
166
172 void set_transformer(ModuleBase::SphericalBesselTransformer sbt, const int update = 0);
173
175 void set_grid(const bool for_r_space, const int ngrid, const double* grid, const char mode = 'i');
176
178 void set_uniform_grid(const bool for_r_space,
179 const int ngrid,
180 const double cutoff,
181 const char mode = 'i',
182 const bool enable_fft = false);
184
185 protected:
186 std::string symbol_ = "";
187 int itype_ = 0;
188 int lmax_ = -1;
189 double rcut_max_ = 0.0;
190
191 int* nzeta_ = nullptr;
192 int nzeta_max_ = 0;
193 int nchi_ = 0;
194
196
203 int* index_map_ = nullptr;
204
206 void cleanup();
207
209 int index(const int l, const int izeta) const;
210
212 void indexing();
213
215 void set_rcut_max();
216};
217
218#endif
A class that provides spherical Bessel transforms.
Definition spherical_bessel_transformer.h:69
A class that represents a numerical radial function.
Definition numerical_radial.h:65
Definition ORB_nonlocal.h:22
Definition ORB_atomic.h:52
An abstract class representing the set of all numerical radial functions (of the same kind) from a si...
Definition radial_set.h:26
int nzeta_max_
maximum number of NumericalRadial objects among each angular momentum
Definition radial_set.h:192
virtual void build(const Numerical_Nonlocal &, const int=0, std::ofstream *const =nullptr)
Builds from a Numerical_Nonlocal object.
Definition radial_set.h:68
NumericalRadial * chi_
array of NumericalRadial objects
Definition radial_set.h:195
void cleanup()
Deallocates memory and reset all class members to default values.
Definition radial_set.cpp:180
virtual ~RadialSet()
Definition radial_set.cpp:13
int lmax() const
Definition radial_set.h:155
virtual void build(const int=0, const double=1.0, const bool=false, const int=0, const double=10.0, const double=0.01, const double=1e-6, const int=0, const std::string="", const std::string="minimal-valence", std::ofstream *const =nullptr)
Builds from hydrogen-like radial functions.
Definition radial_set.h:79
int index(const int l, const int izeta) const
Gets the index in chi_ array from (l,izeta).
Definition radial_set.cpp:109
void indexing()
Builds index_map_ from nzeta_, nzeta_max_ and lmax_.
Definition radial_set.cpp:118
virtual RadialSet * clone() const =0
for polymorphic copy
void set_rcut_max()
Sets rcut_max_ to be the maximum rcut of all NumericalRadial objects.
Definition radial_set.cpp:100
void set_uniform_grid(const bool for_r_space, const int ngrid, const double cutoff, const char mode='i', const bool enable_fft=false)
Sets a common uniform grid for all NumericalRadial objects.
Definition radial_set.cpp:167
virtual void build(const std::string &, const int=0, std::ofstream *const =nullptr, const int=0)
Builds the object from a file.
Definition radial_set.h:56
int itype() const
Definition radial_set.h:154
int * index_map_
A map from (l,izeta) to an index in chi_ array.
Definition radial_set.h:203
RadialSet()=default
const NumericalRadial & chi(const int l, const int izeta)
Definition radial_set.cpp:141
const NumericalRadial * cend() const
Definition radial_set.h:164
std::string symbol_
usually the chemical symbol
Definition radial_set.h:186
int nchi_
total number of NumericalRadial objects
Definition radial_set.h:193
virtual void to_numerical_orbital(Numerical_Orbital &, const int nk_legacy=4005, const double lcao_dk=0.01) const
Overwrites the content of a Numerical_Orbital object with the current object.
Definition radial_set.cpp:88
int * nzeta_
number of NumericalRadial objects for each angular momentum
Definition radial_set.h:191
int nzeta_max() const
Definition radial_set.h:159
virtual void build(const std::string &, const int, const double, const double, std::ofstream *const =nullptr, const int=0)
Builds from pseudopotential file.
Definition radial_set.h:98
double rcut_max() const
Definition radial_set.h:156
int nzeta(const int l) const
Definition radial_set.h:158
int lmax_
maximum angular momentum among all NumericalRadial objects
Definition radial_set.h:188
void write_abacus_orb(const std::string &, const int=0) const
write any RadialSet object to a file in ABACUS numerical atomic orbital format.
Definition radial_set.cpp:198
virtual void build(const int, const int, const double, const double=0.1, const double=0.01, const int=0, std::ofstream *=nullptr, const int=0)
Builds with the truncated spherical Bessel functions.
Definition radial_set.h:113
RadialSet & operator=(const RadialSet &)
deep copy
Definition radial_set.cpp:49
double rcut_max_
maximum rcut (NOT rmax!) among all NumericalRadial objects
Definition radial_set.h:189
const NumericalRadial * cbegin() const
Definition radial_set.h:163
const std::string & symbol() const
Definition radial_set.h:153
void set_transformer(ModuleBase::SphericalBesselTransformer sbt, const int update=0)
Definition radial_set.cpp:150
int nchi() const
Definition radial_set.h:160
int itype_
usually the index for element in calculation
Definition radial_set.h:187
void set_grid(const bool for_r_space, const int ngrid, const double *grid, const char mode='i')
Sets a common grid for all NumericalRadial objects.
Definition radial_set.cpp:158