SIRIUS 7.5.0
Electronic structure library and applications
|
Data and methods specific to the actual atom in the unit cell. More...
#include <atom.hpp>
Public Member Functions | |
Atom (Atom_type const &type__, r3::vector< double > position__, r3::vector< double > vector_field__) | |
Constructor. More... | |
void | init () |
Initialize atom. More... | |
void | generate_radial_integrals (sddk::device_t pu__, mpi::Communicator const &comm__) |
Generate radial Hamiltonian and effective magnetic field integrals. More... | |
Atom_type const & | type () const |
Return const reference to corresponding atom type object. More... | |
Atom_symmetry_class & | symmetry_class () |
Return reference to corresponding atom symmetry class. More... | |
Atom_symmetry_class const & | symmetry_class () const |
Return const referenced to atom symmetry class. More... | |
int | type_id () const |
Return atom type id. More... | |
r3::vector< double > const & | position () const |
Return atom position in fractional coordinates. More... | |
void | set_position (r3::vector< double > position__) |
Set atom position in fractional coordinates. More... | |
auto | vector_field () const |
Return vector field. More... | |
int | symmetry_class_id () const |
Return id of the symmetry class. More... | |
void | set_symmetry_class (std::shared_ptr< Atom_symmetry_class > symmetry_class__) |
Set symmetry class of the atom. More... | |
void | set_nonspherical_potential (double *veff__, double *beff__[3]) |
Set muffin-tin potential and magnetic field. More... | |
void | sync_radial_integrals (mpi::Communicator const &comm__, int const rank__) |
void | sync_occupation_matrix (mpi::Communicator const &comm__, int const rank__) |
double const * | h_radial_integrals (int idxrf1, int idxrf2) const |
double * | h_radial_integrals (int idxrf1, int idxrf2) |
double const * | b_radial_integrals (int idxrf1, int idxrf2, int x) const |
template<spin_block_t sblock> | |
std::complex< double > | radial_integrals_sum_L3 (int idxrf1__, int idxrf2__, std::vector< gaunt_L3< std::complex< double > > > const &gnt__) const |
int | num_mt_points () const |
Radial_grid< double > const & | radial_grid () const |
double | radial_grid (int idx) const |
double | mt_radius () const |
int | zn () const |
int | mt_basis_size () const |
int | mt_aw_basis_size () const |
int | mt_lo_basis_size () const |
void | set_occupation_matrix (const std::complex< double > *source) |
void | get_occupation_matrix (std::complex< double > *destination) |
void | set_uj_correction_matrix (const int l, const std::complex< double > *source) |
bool | apply_uj_correction () |
int | uj_correction_l () |
auto | uj_correction_matrix (int lm1, int lm2, int ispn1, int ispn2) |
double & | d_mtrx (int xi1, int xi2, int iv) |
double const & | d_mtrx (int xi1, int xi2, int iv) const |
auto const & | d_mtrx () const |
auto & | d_mtrx () |
Private Attributes | |
Atom_type const & | type_ |
Type of the given atom. More... | |
std::shared_ptr< Atom_symmetry_class > | symmetry_class_ |
Symmetry class of the given atom. More... | |
r3::vector< double > | position_ |
Position in fractional coordinates. More... | |
r3::vector< double > | vector_field_ |
Vector field associated with the current site. More... | |
sddk::mdarray< double, 2 > | veff_ |
Muffin-tin potential. More... | |
sddk::mdarray< double, 3 > | h_radial_integrals_ |
Radial integrals of the Hamiltonian. More... | |
sddk::mdarray< double, 2 > | beff_ [3] |
Muffin-tin magnetic field. More... | |
sddk::mdarray< double, 4 > | b_radial_integrals_ |
Radial integrals of the effective magnetic field. More... | |
int | lmax_pot_ {-1} |
Maximum l for potential and magnetic field. More... | |
sddk::mdarray< std::complex< double >, 4 > | occupation_matrix_ |
Unsymmetrized (sampled over IBZ) occupation matrix of the L(S)DA+U method. More... | |
sddk::mdarray< std::complex< double >, 4 > | uj_correction_matrix_ |
U,J correction matrix of the L(S)DA+U method. More... | |
bool | apply_uj_correction_ {false} |
True if UJ correction is applied for the current atom. More... | |
int | uj_correction_l_ {-1} |
Orbital quantum number for UJ correction. More... | |
sddk::mdarray< double, 3 > | d_mtrx_ |
Auxiliary form of the D_{ij} operator matrix of the pseudo-potential method. More... | |
Data and methods specific to the actual atom in the unit cell.
|
inline |
|
inline |
Generate radial Hamiltonian and effective magnetic field integrals.
Hamiltonian operator has the following representation inside muffin-tins:
\[ \hat H = -\frac{1}{2}\nabla^2 + \sum_{\ell m} V_{\ell m}(r) R_{\ell m}(\hat {\bf r}) = \underbrace{-\frac{1}{2} \nabla^2+V_{00}(r)R_{00}}_{H_{s}(r)} +\sum_{\ell=1} \sum_{m=-\ell}^{\ell} V_{\ell m}(r) R_{\ell m}(\hat {\bf r}) = \sum_{\ell m} \widetilde V_{\ell m}(r) R_{\ell m}(\hat {\bf r}) \]
where
\[ \widetilde V_{\ell m}(r) = \left\{ \begin{array}{ll} \frac{H_{s}(r)}{R_{00}} & \ell = 0 \\ V_{\ell m}(r) & \ell > 0 \end{array} \right. \]
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
Compute the following kinds of sums for different spin-blocks of the Hamiltonian:
\[ \sum_{L_3} \langle Y_{L_1} u_{\ell_1 \nu_1} | R_{L_3} h_{L_3} | Y_{L_2} u_{\ell_2 \nu_2} \rangle = \sum_{L_3} \langle u_{\ell_1 \nu_1} | h_{L_3} | u_{\ell_2 \nu_2} \rangle \langle Y_{L_1} | R_{L_3} | Y_{L_2} \rangle \]
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
Auxiliary form of the D_{ij} operator matrix of the pseudo-potential method.
The matrix is calculated for the scalar and vector effective fields (thus, it is real and symmetric).
\[ D_{\xi \xi'}^{\alpha} = \int V({\bf r}) Q_{\xi \xi'}^{\alpha}({\bf r}) d{\bf r} \]
The ionic part of the D-operator matrix is added in the D_operator class, when it is initialized.