ABACUS develop
Atomic-orbital Based Ab-initio Computation at UStc
Loading...
Searching...
No Matches
numerical_radial.h
Go to the documentation of this file.
1#ifndef NUMERICAL_RADIAL_H_
2#define NUMERICAL_RADIAL_H_
3
4#include <cassert>
5#include <string>
6#include <memory>
7
10
65{
66public:
67 NumericalRadial() = default;
69
72
74
92 void build(const int l,
93 const bool for_r_space,
94 const int ngrid,
95 const double* const grid,
96 const double* const value,
97 const int p = 0,
98 const int izeta = 0,
99 const std::string symbol = "",
100 const int itype = 0,
101 const bool init_sbt = true
102 );
103
113 const int nk_legacy = 4005, // equivalent to lcao_ecut = 1600
114 const double lcao_dk = 0.01,
115 const bool out_element_info = false,
116 const bool cal_force = false) const;
117
133
152 void set_grid(const bool for_r_space, const int ngrid, const double* const grid, const char mode = 'i');
153
172 void set_uniform_grid(const bool for_r_space,
173 const int ngrid,
174 const double cutoff,
175 const char mode = 'i',
176 const bool enable_fft = false);
177
187 void set_value(const bool for_r_space,
188 const double* const value,
189 const int p
190 );
191
193 void wipe(const bool r_space = true, const bool k_space = true);
194
196
236 void radtab(const char op,
240 const NumericalRadial& ket,
242 const int l,
243 double* const table,
244 const int nr_tab,
245 const double rmax_tab,
246 const bool deriv = false
247 ) const;
248
261 void normalize(bool for_r_space = true);
262
267 std::string const& symbol() const { return symbol_; }
268 int itype() const { return itype_; }
269 int izeta() const { return izeta_; }
270 int l() const { return l_; }
271 int nr() const { return nr_; } // paired with rmax(), not rcut!
272 int nk() const { return nk_; }
273 double rcut() const { return rgrid_[std::min(ircut_, nr_-1)]; }
274 double kcut() const { return kgrid_[std::min(ikcut_, nk_-1)]; }
275 double rmax() const { return rgrid_[nr_-1]; }
276 double kmax() const { return kgrid_[nk_-1]; }
277 const double* rgrid() const { return rgrid_; }
278 const double* kgrid() const { return kgrid_; }
279 const double* rvalue() const { return rvalue_; }
280 const double* kvalue() const { return kvalue_; }
281 double pr() const { return pr_; }
282 double pk() const { return pk_; }
283 bool is_fft_compliant() const { return is_fft_compliant_; }
285
286 double rgrid(int ir) const { return rgrid_[ir]; }
287 double kgrid(int ik) const { return kgrid_[ik]; }
288 double rvalue(int ir) const { return rvalue_[ir]; }
289 double kvalue(int ik) const { return kvalue_[ik]; }
291
292private:
293 std::string symbol_ = "";
294 int itype_ = 0;
295 int l_ = -1;
296 int izeta_ = 0;
297
298 int nr_ = 0;
299 int nk_ = 0;
300
301 double* rgrid_ = nullptr;
302 double* kgrid_ = nullptr;
303
317 int ircut_ = 0;
318 int ikcut_ = 0;
319
320 double* rvalue_ = nullptr;
321 double* kvalue_ = nullptr;
322
336 bool is_fft_compliant_ = false;
337
353
358 int pr_ = 0;
359
365 int pk_ = 0;
367
370
380 void transform(const bool forward);
381
383 void set_icut(const bool for_r_space, const bool for_k_space, const double tol = 1e-15);
384
385 // FIXME is_uniform and is_fft_compliant should be more robust for arrays whose elements
386 // are all close to machine precision
387
389 static bool is_uniform(const int n, const double* const grid, const double tol = 1e-15);
390
396 static bool is_fft_compliant(const int nr,
397 const double* const rgrid,
398 const int nk,
399 const double* const kgrid,
400 const double tol = 1e-15
401 );
402};
403
404#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
~NumericalRadial()
Definition numerical_radial.cpp:97
const double * kvalue() const
padded zeros ignored
Definition numerical_radial.h:280
int ircut_
Index of the first trailing zero.
Definition numerical_radial.h:317
int nr_
number of r-space grid points
Definition numerical_radial.h:298
double * rgrid_
r-space grid
Definition numerical_radial.h:301
double rmax() const
padded zeros considered
Definition numerical_radial.h:275
const double * rvalue() const
padded zeros ignored
Definition numerical_radial.h:279
int nk() const
padded zeros ignored
Definition numerical_radial.h:272
int izeta() const
padded zeros ignored
Definition numerical_radial.h:269
bool is_fft_compliant_
A flag that tells whether the r & k grids are FFT-compliant.
Definition numerical_radial.h:336
ModuleBase::SphericalBesselTransformer sbt() const
padded zeros ignored
Definition numerical_radial.h:284
double pk() const
padded zeros ignored
Definition numerical_radial.h:282
int l() const
padded zeros ignored
Definition numerical_radial.h:270
void set_grid(const bool for_r_space, const int ngrid, const double *const grid, const char mode='i')
Sets up a grid.
Definition numerical_radial.cpp:200
void set_icut(const bool for_r_space, const bool for_k_space, const double tol=1e-15)
Updates ircut_ and/or ikcut_.
Definition numerical_radial.cpp:474
int pr_
implicit exponent in rvalues_
Definition numerical_radial.h:358
void to_numerical_orbital_lm(Numerical_Orbital_Lm &orbital_lm, const int nk_legacy=4005, const double lcao_dk=0.01, const bool out_element_info=false, const bool cal_force=false) const
Overwrites the content of a Numerical_Orbital_Lm object with the current object.
Definition numerical_radial.cpp:156
static bool is_uniform(const int n, const double *const grid, const double tol=1e-15)
Checks whether a grid is uniform.
Definition numerical_radial.cpp:495
std::string symbol_
chemical symbol
Definition numerical_radial.h:293
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 up a uniform grid.
Definition numerical_radial.cpp:274
int nk_
number of k-space grid points
Definition numerical_radial.h:299
void build(const int l, const bool for_r_space, const int ngrid, const double *const grid, const double *const value, const int p=0, const int izeta=0, const std::string symbol="", const int itype=0, const bool init_sbt=true)
Initializes the object by providing the grid & values in one space.
Definition numerical_radial.cpp:105
double rgrid(int ir) const
padded zeros ignored
Definition numerical_radial.h:286
void transform(const bool forward)
Transforms the r-space values to get k-space values, or vice versa.
Definition numerical_radial.cpp:433
double * kvalue_
k-space value
Definition numerical_radial.h:321
int ikcut_
Definition numerical_radial.h:318
double pr() const
padded zeros ignored
Definition numerical_radial.h:281
int l_
angular momentum
Definition numerical_radial.h:295
double kcut() const
padded zeros ignored
Definition numerical_radial.h:274
double rcut() const
padded zeros ignored
Definition numerical_radial.h:273
int nr() const
padded zeros ignored
Definition numerical_radial.h:271
void radtab(const char op, const NumericalRadial &ket, const int l, double *const table, const int nr_tab, const double rmax_tab, const bool deriv=false) const
Computes the radial table for two-center integrals.
Definition numerical_radial.cpp:347
NumericalRadial & operator=(NumericalRadial const &)
Deep-copy grid & values.
Definition numerical_radial.cpp:49
int pk_
implicit exponent in kvalues_
Definition numerical_radial.h:365
NumericalRadial()=default
const double * rgrid() const
padded zeros ignored
Definition numerical_radial.h:277
int itype_
element index in calculation
Definition numerical_radial.h:294
bool is_fft_compliant() const
padded zeros ignored
Definition numerical_radial.h:283
double * kgrid_
k-space grid
Definition numerical_radial.h:302
int izeta_
further index for NumericalRadial objects with the same itype_and l_
Definition numerical_radial.h:296
double kgrid(int ik) const
padded zeros ignored
Definition numerical_radial.h:287
std::string const & symbol() const
padded zeros ignored
Definition numerical_radial.h:267
double * rvalue_
r-space value
Definition numerical_radial.h:320
void normalize(bool for_r_space=true)
Normalizes the radial function.
Definition numerical_radial.cpp:408
int itype() const
padded zeros ignored
Definition numerical_radial.h:268
void set_value(const bool for_r_space, const double *const value, const int p)
Updates values on an existing grid.
Definition numerical_radial.cpp:295
double kvalue(int ik) const
padded zeros ignored
Definition numerical_radial.h:289
void set_transformer(ModuleBase::SphericalBesselTransformer sbt, int update=0)
Sets a SphericalBesselTransformer.
Definition numerical_radial.cpp:181
double rvalue(int ir) const
padded zeros ignored
Definition numerical_radial.h:288
ModuleBase::SphericalBesselTransformer sbt_
An object that provides spherical Bessel transforms.
Definition numerical_radial.h:369
void wipe(const bool r_space=true, const bool k_space=true)
Removes the grid & values in r or k space.
Definition numerical_radial.cpp:316
const double * kgrid() const
padded zeros ignored
Definition numerical_radial.h:278
double kmax() const
padded zeros ignored
Definition numerical_radial.h:276
Definition ORB_atomic_lm.h:21
const std::map< std::string, std::vector< double > > op
Definition vdwd3_autoset_xcparam.cpp:375