Compute atomic forces.
More...
#include <force.hpp>
|
| Force (Simulation_context &ctx__, Density &density__, Potential &potential__, K_point_set &kset__) |
|
sddk::mdarray< double, 2 > const & | calc_forces_vloc () |
|
sddk::mdarray< double, 2 > const & | forces_vloc () const |
|
template<typename T > |
void | calc_forces_nonloc_aux () |
|
sddk::mdarray< double, 2 > const & | calc_forces_nonloc () |
|
sddk::mdarray< double, 2 > const & | forces_nonloc () const |
|
sddk::mdarray< double, 2 > const & | calc_forces_core () |
|
sddk::mdarray< double, 2 > const & | forces_core () const |
|
sddk::mdarray< double, 2 > const & | calc_forces_scf_corr () |
| Calculate SCF correction to the forces. More...
|
|
sddk::mdarray< double, 2 > const & | forces_scf_corr () const |
|
sddk::mdarray< double, 2 > const & | calc_forces_us () |
|
sddk::mdarray< double, 2 > const & | forces_us () const |
|
sddk::mdarray< double, 2 > const & | calc_forces_ewald () |
|
sddk::mdarray< double, 2 > const & | forces_ewald () const |
|
sddk::mdarray< double, 2 > const & | calc_forces_hubbard () |
|
sddk::mdarray< double, 2 > const & | forces_hubbard () const |
|
sddk::mdarray< double, 2 > const & | calc_forces_usnl () |
|
sddk::mdarray< double, 2 > const & | calc_forces_hf () |
|
sddk::mdarray< double, 2 > const & | forces_hf () const |
|
sddk::mdarray< double, 2 > const & | calc_forces_rho () |
|
sddk::mdarray< double, 2 > const & | forces_rho () const |
|
sddk::mdarray< double, 2 > const & | calc_forces_ibs () |
|
sddk::mdarray< double, 2 > const & | forces_ibs () const |
|
sddk::mdarray< double, 2 > const & | calc_forces_total () |
|
sddk::mdarray< double, 2 > const & | forces_total () const |
|
void | print_info (std::ostream &out__, int verbosity__) |
|
|
template<typename T , typename F > |
void | add_k_point_contribution (K_point< T > &kp__, sddk::mdarray< double, 2 > &forces__) const |
|
void | compute_dmat (K_point< double > *kp__, la::dmatrix< std::complex< double > > &dm__) const |
|
void | hubbard_force_add_k_contribution_collinear (K_point< double > &kp__, Q_operator< double > &q_op__, sddk::mdarray< double, 2 > &forceh_) |
|
void | add_ibs_force (K_point< double > *kp__, Hamiltonian_k< double > &Hk__, sddk::mdarray< double, 2 > &ffac__, sddk::mdarray< double, 2 > &forcek__) const |
|
|
Simulation_context & | ctx_ |
|
const Density & | density_ |
|
Potential & | potential_ |
|
K_point_set & | kset_ |
|
sddk::mdarray< double, 2 > | forces_vloc_ |
|
sddk::mdarray< double, 2 > | forces_us_ |
|
sddk::mdarray< double, 2 > | forces_nonloc_ |
|
sddk::mdarray< double, 2 > | forces_usnl_ |
|
sddk::mdarray< double, 2 > | forces_core_ |
|
sddk::mdarray< double, 2 > | forces_ewald_ |
|
sddk::mdarray< double, 2 > | forces_scf_corr_ |
|
sddk::mdarray< double, 2 > | forces_hubbard_ |
|
sddk::mdarray< double, 2 > | forces_hf_ |
|
sddk::mdarray< double, 2 > | forces_rho_ |
|
sddk::mdarray< double, 2 > | forces_ibs_ |
|
sddk::mdarray< double, 2 > | forces_total_ |
|
Compute atomic forces.
Definition at line 43 of file force.hpp.
◆ Force()
◆ add_k_point_contribution()
template<typename T , typename F >
void sirius::Force::add_k_point_contribution |
( |
K_point< T > & |
kp__, |
|
|
sddk::mdarray< double, 2 > & |
forces__ |
|
) |
| const |
|
private |
◆ compute_dmat()
void sirius::Force::compute_dmat |
( |
K_point< double > * |
kp__, |
|
|
la::dmatrix< std::complex< double > > & |
dm__ |
|
) |
| const |
|
private |
In the second-variational approach we need to compute the following expression for the k-dependent contribution to the forces:
\[ {\bf F}_{\rm IBS}^{\alpha}=\sum_{\bf k}w_{\bf k}\sum_{l\sigma}n_{l{\bf k}} \sum_{ij}c_{\sigma i}^{l{\bf k}*}c_{\sigma j}^{l{\bf k}} {\bf F}_{ij}^{\alpha{\bf k}} \]
This function sums over band and spin indices to get the "density matrix":
\[ q_{ij} = \sum_{l\sigma}n_{l{\bf k}} c_{\sigma i}^{l{\bf k}*}c_{\sigma j}^{l{\bf k}} \]
Definition at line 111 of file force.cpp.
◆ hubbard_force_add_k_contribution_collinear()
void sirius::Force::hubbard_force_add_k_contribution_collinear |
( |
K_point< double > & |
kp__, |
|
|
Q_operator< double > & |
q_op__, |
|
|
sddk::mdarray< double, 2 > & |
forceh_ |
|
) |
| |
|
private |
Compute the forces for the simplex LDA+U method not the fully rotationally invariant one. It can not be used for LDA+U+SO either.
It is based on this reference : PRB 84, 161102(R) (2011)
Definition at line 586 of file force.cpp.
◆ add_ibs_force()
◆ calc_forces_vloc()
sddk::mdarray< double, 2 > const & sirius::Force::calc_forces_vloc |
( |
| ) |
|
◆ forces_vloc()
sddk::mdarray< double, 2 > const & sirius::Force::forces_vloc |
( |
| ) |
const |
|
inline |
◆ calc_forces_nonloc_aux()
template<typename T >
template void sirius::Force::calc_forces_nonloc_aux< double > |
( |
| ) |
|
◆ calc_forces_nonloc()
sddk::mdarray< double, 2 > const & sirius::Force::calc_forces_nonloc |
( |
| ) |
|
◆ forces_nonloc()
sddk::mdarray< double, 2 > const & sirius::Force::forces_nonloc |
( |
| ) |
const |
|
inline |
◆ calc_forces_core()
sddk::mdarray< double, 2 > const & sirius::Force::calc_forces_core |
( |
| ) |
|
◆ forces_core()
sddk::mdarray< double, 2 > const & sirius::Force::forces_core |
( |
| ) |
const |
|
inline |
◆ calc_forces_scf_corr()
sddk::mdarray< double, 2 > const & sirius::Force::calc_forces_scf_corr |
( |
| ) |
|
Calculate SCF correction to the forces.
Based on the following paper: PhysRevB.47.4771
Definition at line 470 of file force.cpp.
◆ forces_scf_corr()
sddk::mdarray< double, 2 > const & sirius::Force::forces_scf_corr |
( |
| ) |
const |
|
inline |
◆ calc_forces_us()
sddk::mdarray< double, 2 > const & sirius::Force::calc_forces_us |
( |
| ) |
|
◆ forces_us()
sddk::mdarray< double, 2 > const & sirius::Force::forces_us |
( |
| ) |
const |
|
inline |
◆ calc_forces_ewald()
sddk::mdarray< double, 2 > const & sirius::Force::calc_forces_ewald |
( |
| ) |
|
◆ forces_ewald()
sddk::mdarray< double, 2 > const & sirius::Force::forces_ewald |
( |
| ) |
const |
|
inline |
◆ calc_forces_hubbard()
sddk::mdarray< double, 2 > const & sirius::Force::calc_forces_hubbard |
( |
| ) |
|
◆ forces_hubbard()
sddk::mdarray< double, 2 > const & sirius::Force::forces_hubbard |
( |
| ) |
const |
|
inline |
◆ calc_forces_usnl()
sddk::mdarray< double, 2 > const & sirius::Force::calc_forces_usnl |
( |
| ) |
|
◆ calc_forces_hf()
sddk::mdarray< double, 2 > const & sirius::Force::calc_forces_hf |
( |
| ) |
|
◆ forces_hf()
sddk::mdarray< double, 2 > const & sirius::Force::forces_hf |
( |
| ) |
const |
|
inline |
◆ calc_forces_rho()
sddk::mdarray< double, 2 > const & sirius::Force::calc_forces_rho |
( |
| ) |
|
◆ forces_rho()
sddk::mdarray< double, 2 > const & sirius::Force::forces_rho |
( |
| ) |
const |
|
inline |
◆ calc_forces_ibs()
sddk::mdarray< double, 2 > const & sirius::Force::calc_forces_ibs |
( |
| ) |
|
◆ forces_ibs()
sddk::mdarray< double, 2 > const & sirius::Force::forces_ibs |
( |
| ) |
const |
|
inline |
◆ calc_forces_total()
sddk::mdarray< double, 2 > const & sirius::Force::calc_forces_total |
( |
| ) |
|
◆ forces_total()
sddk::mdarray< double, 2 > const & sirius::Force::forces_total |
( |
| ) |
const |
|
inline |
◆ print_info()
void sirius::Force::print_info |
( |
std::ostream & |
out__, |
|
|
int |
verbosity__ |
|
) |
| |
◆ ctx_
◆ density_
const Density& sirius::Force::density_ |
|
private |
◆ potential_
◆ kset_
◆ forces_vloc_
◆ forces_us_
◆ forces_nonloc_
◆ forces_usnl_
◆ forces_core_
◆ forces_ewald_
◆ forces_scf_corr_
◆ forces_hubbard_
◆ forces_hf_
◆ forces_rho_
◆ forces_ibs_
◆ forces_total_
The documentation for this class was generated from the following files: