ABACUS develop
Atomic-orbital Based Ab-initio Computation at UStc
Loading...
Searching...
No Matches
Classes | Functions
RadialProjection Namespace Reference

Classes

class  RadialProjector
 RadialProjector is for projecting a function who has seperatable radial and angular parts: f(r) = f(|r|) * Ylm(theta, phi) onto planewave basis. More...
 

Functions

void _mask_func (std::vector< double > &mask)
 get the mask function for SBFFT
 
void _do_mask_on_radial (const int nr1, const double *r, const double *in, const int nr2, const double *mask, double *out)
 do operation w(r)/m(r) on a radial function. The cutoff radius of w(r) is smaller than the cutoff radius of m(r). The m(r) has been rescaled so that r ranges from 0 to 1.
 

Function Documentation

◆ _do_mask_on_radial()

void RadialProjection::_do_mask_on_radial ( const int  nr1,
const double *  r,
const double *  in,
const int  nr2,
const double *  mask,
double *  out 
)

do operation w(r)/m(r) on a radial function. The cutoff radius of w(r) is smaller than the cutoff radius of m(r). The m(r) has been rescaled so that r ranges from 0 to 1.

Parameters
nr1number of grid points of function to operate
rgrid points of function to operate
infunction to operate
nr2number of grid points of mask function
maskmask function
outoutput value

◆ _mask_func()

void RadialProjection::_mask_func ( std::vector< double > &  mask)

get the mask function for SBFFT

====================================================================================

                 Small box Fast-Fourier-Transform (SBFFT)

==================================================================================== Small box FFT is a technique for quickly intergrating real-space localized functions , or say perform FFT in a small box defined by a "mask function" with relatively low time complexity, will be out-performing in system where number of atoms are larger than ten. For details please refer to the work: Mask-function real-space implementations of nonlocal pseudopotentials by Wang, L.-W., PHYSICAL REVIEW B, VOLUME64,201107(R)

Following are the brief technical review of this technique. Given the function to be transformed w(r):

  1. Generate the q-grid in range |q| < 2qmax - qc, in which the qmax is the one defined by ecutrho, and qc is the cutoff defined by ecutwfc.
  2. With mask function m(r) generated, make division of w(r) by m(r). The real space cutoff (or the radius that w(r) vanishes), r0, must be smaller than the cutoff of m(r) to ensure the convergence of the division. Denote wm(r) = w(r)/m(r).
  3. Make FT on wm(r) to get wm(q)
  4. Make inverse FT with only the q-grid in range |q| < 2qmax - qc to get the wm'(r).
  5. Perform real-space integration on function w'(r)*m(r)*exp(iqr).
Parameters
maskmask function
Here is the caller graph for this function: