ABACUS develop
Atomic-orbital Based Ab-initio Computation at UStc
Loading...
Searching...
No Matches
Public Member Functions | Private Types | Private Member Functions | Private Attributes | List of all members
TwoCenterTable Class Reference

#include <two_center_table.h>

Collaboration diagram for TwoCenterTable:

Public Member Functions

 TwoCenterTable ()=default
 
 ~TwoCenterTable ()
 
 TwoCenterTable (const TwoCenterTable &)=delete
 
TwoCenterTableoperator= (const TwoCenterTable &)=delete
 
void build (const RadialCollection &bra, const RadialCollection &ket, const char op, const int nr, const double cutoff)
 
int nchi_ket (const int itype, const int l) const
 number of NumericalRadial objects in the ket with given itype and l
 
int lmax_ket () const
 maximum angular momentum of the ket
 
size_t memory () const
 Returns the amount of heap memory used by this class (in bytes).
 
Getters
char op () const
 
int nr () const
 returns the number of radial points of each table
 
int ntab () const
 
double rmax () const
 returns the radius cutoff of the table
 
const double * table (const int itype1, const int l1, const int izeta1, const int itype2, const int l2, const int izeta2, const int l, const bool deriv=false) const
 gets the read-only pointer to a specific table
 
void lookup (const int itype1, const int l1, const int izeta1, const int itype2, const int l2, const int izeta2, const int l, const double R, double *val, double *dval=nullptr) const
 

Private Types

typedef void(TwoCenterTable::* looped_func) (const NumericalRadial *, const NumericalRadial *, const int l)
 

Private Member Functions

int & table_index (const NumericalRadial *ptr_rad1, const NumericalRadial *ptr_rad2, const int l)
 returns the row-index of the table corresponding to the given two radial functions and l
 
void cleanup ()
 deallocates memory and reset variables to default.
 
bool is_present (const int itype1, const int l1, const int izeta1, const int itype2, const int l2, const int izeta2, const int l) const
 returns whether the given indices map to an entry in the table
 
double dfact (int l) const
 double factorial
 
void two_center_loop (const RadialCollection &bra, const RadialCollection &ket, looped_func f)
 loop-execute a function over all pairwise radial functions & l with non-vanishing Gaunt coefficients
 
void _indexing (const NumericalRadial *it1, const NumericalRadial *it2, const int l)
 various looped functions during the construction of table
 
void _tabulate (const NumericalRadial *it1, const NumericalRadial *it2, const int l)
 

Private Attributes

char op_ = '\0'
 operator associated with the present table
 
int ntab_ = 0
 number of table entries
 
int nr_ = 0
 number of radial points of each table
 
double rmax_ = 0.0
 cutoff radius of the table
 
double * rgrid_ = nullptr
 
container::Tensor nchi_ket_ {container::DataType::DT_INT, container::TensorShape({0})}
 Table of size ntype x lmax that stores the number of radial functions of given type and l.
 
container::Tensor table_ {container::DataType::DT_DOUBLE, container::TensorShape({0})}
 two-center integral radial table, stored as a row-major matrix
 
container::Tensor dtable_ {container::DataType::DT_DOUBLE, container::TensorShape({0})}
 derivative table generated from cubic spline interpolation
 
container::Tensor index_map_ {container::DataType::DT_INT, container::TensorShape({0})}
 map (itype1, l1, izeta1, itype2, l2, izeta2, l) to a row index in the table
 

Member Typedef Documentation

◆ looped_func

typedef void(TwoCenterTable::* TwoCenterTable::looped_func) (const NumericalRadial *, const NumericalRadial *, const int l)
private

Constructor & Destructor Documentation

◆ TwoCenterTable() [1/2]

TwoCenterTable::TwoCenterTable ( )
default

◆ ~TwoCenterTable()

TwoCenterTable::~TwoCenterTable ( )
inline

◆ TwoCenterTable() [2/2]

TwoCenterTable::TwoCenterTable ( const TwoCenterTable )
delete

Member Function Documentation

◆ _indexing()

void TwoCenterTable::_indexing ( const NumericalRadial it1,
const NumericalRadial it2,
const int  l 
)
private

various looped functions during the construction of table

Here is the call graph for this function:
Here is the caller graph for this function:

◆ _tabulate()

void TwoCenterTable::_tabulate ( const NumericalRadial it1,
const NumericalRadial it2,
const int  l 
)
private
Here is the call graph for this function:
Here is the caller graph for this function:

◆ build()

void TwoCenterTable::build ( const RadialCollection bra,
const RadialCollection ket,
const char  op,
const int  nr,
const double  cutoff 
)
Parameters
[in]braradial collection involved in <bra|op|ket>
[in]ketradial collection involved in <bra|op|ket>
[in]opoperator of the two-center integral
[in]nrnumber of table grid points
[in]cutoffcutoff radius of the table
Here is the call graph for this function:
Here is the caller graph for this function:

◆ cleanup()

void TwoCenterTable::cleanup ( )
private

deallocates memory and reset variables to default.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ dfact()

double TwoCenterTable::dfact ( int  l) const
private

double factorial

Here is the caller graph for this function:

◆ is_present()

bool TwoCenterTable::is_present ( const int  itype1,
const int  l1,
const int  izeta1,
const int  itype2,
const int  l2,
const int  izeta2,
const int  l 
) const
private

returns whether the given indices map to an entry in the table

Here is the call graph for this function:
Here is the caller graph for this function:

◆ lmax_ket()

int TwoCenterTable::lmax_ket ( ) const
inline

maximum angular momentum of the ket

Here is the call graph for this function:
Here is the caller graph for this function:

◆ lookup()

void TwoCenterTable::lookup ( const int  itype1,
const int  l1,
const int  izeta1,
const int  itype2,
const int  l2,
const int  izeta2,
const int  l,
const double  R,
double *  val,
double *  dval = nullptr 
) const

returns the operator of the two-center integral

Parameters
[in]itype1element index of chi1
[in]l1angular momentum of chi1
[in]izeta1zeta number of chi1
[in]itype2element index of chi2
[in]l2angular momentum of chi2
[in]izeta2zeta number of chi2
[in]langular momentum of the entry
[in]Rdistance between the two centers
[out]valinterpolated values from table_
[out]dvalinterpolated values from dtable_
Here is the call graph for this function:
Here is the caller graph for this function:

◆ memory()

size_t TwoCenterTable::memory ( ) const
inline

Returns the amount of heap memory used by this class (in bytes).

Here is the call graph for this function:
Here is the caller graph for this function:

◆ nchi_ket()

int TwoCenterTable::nchi_ket ( const int  itype,
const int  l 
) const
inline

number of NumericalRadial objects in the ket with given itype and l

Here is the call graph for this function:
Here is the caller graph for this function:

◆ nr()

int TwoCenterTable::nr ( ) const
inline

returns the number of radial points of each table

Here is the caller graph for this function:

◆ ntab()

int TwoCenterTable::ntab ( ) const
inline

returns the operator of the two-center integral

◆ op()

char TwoCenterTable::op ( ) const
inline

returns the operator of the two-center integral

Here is the caller graph for this function:

◆ operator=()

TwoCenterTable & TwoCenterTable::operator= ( const TwoCenterTable )
delete

◆ rmax()

double TwoCenterTable::rmax ( ) const
inline

returns the radius cutoff of the table

Here is the caller graph for this function:

◆ table()

const double * TwoCenterTable::table ( const int  itype1,
const int  l1,
const int  izeta1,
const int  itype2,
const int  l2,
const int  izeta2,
const int  l,
const bool  deriv = false 
) const

gets the read-only pointer to a specific table

Parameters
[in]itype1element index of chi1
[in]l1angular momentum of chi1
[in]izeta1zeta number of chi1
[in]itype2element index of chi2
[in]l2angular momentum of chi2
[in]izeta2zeta number of chi2
[in]langular momentum of the entry
[in]derivif true, return the derivative table
Here is the call graph for this function:
Here is the caller graph for this function:

◆ table_index()

int & TwoCenterTable::table_index ( const NumericalRadial ptr_rad1,
const NumericalRadial ptr_rad2,
const int  l 
)
private

returns the row-index of the table corresponding to the given two radial functions and l

Here is the call graph for this function:
Here is the caller graph for this function:

◆ two_center_loop()

void TwoCenterTable::two_center_loop ( const RadialCollection bra,
const RadialCollection ket,
looped_func  f 
)
private

loop-execute a function over all pairwise radial functions & l with non-vanishing Gaunt coefficients

Here is the call graph for this function:
Here is the caller graph for this function:

Member Data Documentation

◆ dtable_

derivative table generated from cubic spline interpolation

◆ index_map_

container::Tensor TwoCenterTable::index_map_ {container::DataType::DT_INT, container::TensorShape({0})}
private

map (itype1, l1, izeta1, itype2, l2, izeta2, l) to a row index in the table

◆ nchi_ket_

container::Tensor TwoCenterTable::nchi_ket_ {container::DataType::DT_INT, container::TensorShape({0})}
private

Table of size ntype x lmax that stores the number of radial functions of given type and l.

◆ nr_

int TwoCenterTable::nr_ = 0
private

number of radial points of each table

◆ ntab_

int TwoCenterTable::ntab_ = 0
private

number of table entries

◆ op_

char TwoCenterTable::op_ = '\0'
private

operator associated with the present table

◆ rgrid_

double* TwoCenterTable::rgrid_ = nullptr
private

◆ rmax_

double TwoCenterTable::rmax_ = 0.0
private

cutoff radius of the table

◆ table_

two-center integral radial table, stored as a row-major matrix


The documentation for this class was generated from the following files: