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) const;
115
131
150 void set_grid(const bool for_r_space, const int ngrid, const double* const grid, const char mode = 'i');
151
170 void set_uniform_grid(const bool for_r_space,
171 const int ngrid,
172 const double cutoff,
173 const char mode = 'i',
174 const bool enable_fft = false);
175
185 void set_value(const bool for_r_space,
186 const double* const value,
187 const int p
188 );
189
191 void wipe(const bool r_space = true, const bool k_space = true);
192
194
234 void radtab(const char op,
238 const NumericalRadial& ket,
240 const int l,
241 double* const table,
242 const int nr_tab,
243 const double rmax_tab,
244 const bool deriv = false
245 ) const;
246
259 void normalize(bool for_r_space = true);
260
265 std::string const& symbol() const { return symbol_; }
266 int itype() const { return itype_; }
267 int izeta() const { return izeta_; }
268 int l() const { return l_; }
269 int nr() const { return nr_; } // paired with rmax(), not rcut!
270 int nk() const { return nk_; }
271 double rcut() const { return rgrid_[std::min(ircut_, nr_-1)]; }
272 double kcut() const { return kgrid_[std::min(ikcut_, nk_-1)]; }
273 double rmax() const { return rgrid_[nr_-1]; }
274 double kmax() const { return kgrid_[nk_-1]; }
275 const double* rgrid() const { return rgrid_; }
276 const double* kgrid() const { return kgrid_; }
277 const double* rvalue() const { return rvalue_; }
278 const double* kvalue() const { return kvalue_; }
279 double pr() const { return pr_; }
280 double pk() const { return pk_; }
281 bool is_fft_compliant() const { return is_fft_compliant_; }
283
284 double rgrid(int ir) const { return rgrid_[ir]; }
285 double kgrid(int ik) const { return kgrid_[ik]; }
286 double rvalue(int ir) const { return rvalue_[ir]; }
287 double kvalue(int ik) const { return kvalue_[ik]; }
289
290private:
291 std::string symbol_ = "";
292 int itype_ = 0;
293 int l_ = -1;
294 int izeta_ = 0;
295
296 int nr_ = 0;
297 int nk_ = 0;
298
299 double* rgrid_ = nullptr;
300 double* kgrid_ = nullptr;
301
315 int ircut_ = 0;
316 int ikcut_ = 0;
317
318 double* rvalue_ = nullptr;
319 double* kvalue_ = nullptr;
320
334 bool is_fft_compliant_ = false;
335
351
356 int pr_ = 0;
357
363 int pk_ = 0;
365
368
378 void transform(const bool forward);
379
381 void set_icut(const bool for_r_space, const bool for_k_space, const double tol = 1e-15);
382
383 // FIXME is_uniform and is_fft_compliant should be more robust for arrays whose elements
384 // are all close to machine precision
385
387 static bool is_uniform(const int n, const double* const grid, const double tol = 1e-15);
388
394 static bool is_fft_compliant(const int nr,
395 const double* const rgrid,
396 const int nk,
397 const double* const kgrid,
398 const double tol = 1e-15
399 );
400};
401
402#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:98
const double * kvalue() const
padded zeros ignored
Definition numerical_radial.h:278
int ircut_
Index of the first trailing zero.
Definition numerical_radial.h:315
int nr_
number of r-space grid points
Definition numerical_radial.h:296
double * rgrid_
r-space grid
Definition numerical_radial.h:299
double rmax() const
padded zeros considered
Definition numerical_radial.h:273
const double * rvalue() const
padded zeros ignored
Definition numerical_radial.h:277
int nk() const
padded zeros ignored
Definition numerical_radial.h:270
int izeta() const
padded zeros ignored
Definition numerical_radial.h:267
bool is_fft_compliant_
A flag that tells whether the r & k grids are FFT-compliant.
Definition numerical_radial.h:334
ModuleBase::SphericalBesselTransformer sbt() const
padded zeros ignored
Definition numerical_radial.h:282
double pk() const
padded zeros ignored
Definition numerical_radial.h:280
int l() const
padded zeros ignored
Definition numerical_radial.h:268
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:197
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:471
int pr_
implicit exponent in rvalues_
Definition numerical_radial.h:356
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:492
std::string symbol_
chemical symbol
Definition numerical_radial.h:291
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:271
int nk_
number of k-space grid points
Definition numerical_radial.h:297
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:106
double rgrid(int ir) const
padded zeros ignored
Definition numerical_radial.h:284
void transform(const bool forward)
Transforms the r-space values to get k-space values, or vice versa.
Definition numerical_radial.cpp:430
double * kvalue_
k-space value
Definition numerical_radial.h:319
int ikcut_
Definition numerical_radial.h:316
double pr() const
padded zeros ignored
Definition numerical_radial.h:279
int l_
angular momentum
Definition numerical_radial.h:293
double kcut() const
padded zeros ignored
Definition numerical_radial.h:272
double rcut() const
padded zeros ignored
Definition numerical_radial.h:271
int nr() const
padded zeros ignored
Definition numerical_radial.h:269
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:344
NumericalRadial & operator=(NumericalRadial const &)
Deep-copy grid & values.
Definition numerical_radial.cpp:50
int pk_
implicit exponent in kvalues_
Definition numerical_radial.h:363
NumericalRadial()=default
const double * rgrid() const
padded zeros ignored
Definition numerical_radial.h:275
int itype_
element index in calculation
Definition numerical_radial.h:292
bool is_fft_compliant() const
padded zeros ignored
Definition numerical_radial.h:281
double * kgrid_
k-space grid
Definition numerical_radial.h:300
int izeta_
further index for NumericalRadial objects with the same itype_and l_
Definition numerical_radial.h:294
double kgrid(int ik) const
padded zeros ignored
Definition numerical_radial.h:285
std::string const & symbol() const
padded zeros ignored
Definition numerical_radial.h:265
double * rvalue_
r-space value
Definition numerical_radial.h:318
void normalize(bool for_r_space=true)
Normalizes the radial function.
Definition numerical_radial.cpp:405
int itype() const
padded zeros ignored
Definition numerical_radial.h:266
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:292
double kvalue(int ik) const
padded zeros ignored
Definition numerical_radial.h:287
void to_numerical_orbital_lm(Numerical_Orbital_Lm &orbital_lm, const int nk_legacy=4005, const double lcao_dk=0.01) const
Overwrites the content of a Numerical_Orbital_Lm object with the current object.
Definition numerical_radial.cpp:157
void set_transformer(ModuleBase::SphericalBesselTransformer sbt, int update=0)
Sets a SphericalBesselTransformer.
Definition numerical_radial.cpp:178
double rvalue(int ir) const
padded zeros ignored
Definition numerical_radial.h:286
ModuleBase::SphericalBesselTransformer sbt_
An object that provides spherical Bessel transforms.
Definition numerical_radial.h:367
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:313
const double * kgrid() const
padded zeros ignored
Definition numerical_radial.h:276
double kmax() const
padded zeros ignored
Definition numerical_radial.h:274
Definition ORB_atomic_lm.h:22
const std::map< std::string, std::vector< double > > op
Definition vdwd3_autoset_xcparam.cpp:372