ABACUS develop
Atomic-orbital Based Ab-initio Computation at UStc
|
#include <spin_constrain.h>
Public Member Functions | |
void | init_sc (double sc_thr_in, int nsc_in, int nsc_min_in, double alpha_trial_in, double sccut_in, double sc_drop_thr_in, const UnitCell &ucell, Parallel_Orbitals *ParaV_in, int nspin_in, K_Vectors &kv_in, void *p_hamilt_in, void *psi_in, elecstate::ElecState *pelec_in, ModulePW::PW_Basis_K *pw_wfc_in=nullptr) |
initialize spin-constrained DFT | |
void | cal_mi_lcao (const int &step, bool print=false) |
calculate the magnetization of each atom with real space projection method for LCAO base | |
void | cal_mi_pw () |
void | cal_mw_from_lambda (int i_step, const ModuleBase::Vector3< double > *delta_lambda=nullptr) |
double | cal_escon () |
calculate the energy of \sum_i \lambda_i * Mi if this->is_mag_converged is true, then this function will calculate the energy and return the real value if this->is_mag_converged is false, then this function will return 0.0 | |
double | get_escon () |
void | run_lambda_loop (int outer_step, bool rerun=true) |
void | update_psi_charge (const ModuleBase::Vector3< double > *delta_lambda, bool pw_solve=true) |
update the charge density for LCAO base with new lambda update the charge density and psi for PW base with new lambda | |
void | calculate_delta_hcc (std::complex< double > *h_tmp, const std::complex< double > *becp_k, const ModuleBase::Vector3< double > *delta_lambda, const int nbands, const int nkb, const int *nh_iat) |
bool | check_rms_stop (int outer_step, int i_step, double rms_error, double duration, double total_duration) |
lambda loop helper functions | |
void | check_restriction (const std::vector< ModuleBase::Vector3< double > > &search, double &alpha_trial) |
apply restriction | |
bool | check_gradient_decay (std::vector< ModuleBase::Vector3< double > > new_spin, std::vector< ModuleBase::Vector3< double > > old_spin, std::vector< ModuleBase::Vector3< double > > new_delta_lambda, std::vector< ModuleBase::Vector3< double > > old_delta_lambda, bool print=false) |
check gradient decay | |
double | cal_alpha_opt (std::vector< ModuleBase::Vector3< double > > spin, std::vector< ModuleBase::Vector3< double > > spin_plus, const double alpha_trial) |
calculate alpha_opt | |
void | print_header () |
print header info | |
void | print_termination () |
print termination message | |
void | print_Mi (std::ofstream &ofs_running) |
print mi | |
void | print_Mag_Force (std::ofstream &ofs_running) |
print magnetic force, defined as \frac{\delta{L}}/{\delta{Mi}} = -lambda[iat]) | |
SpinConstrain (SpinConstrain const &)=delete | |
Delete copy and move constructors and assign operators. | |
SpinConstrain (SpinConstrain &&)=delete | |
void | set_atomCounts (const std::map< int, int > &atomCounts_in) |
set element index to atom index map | |
const std::map< int, int > & | get_atomCounts () const |
get element index to atom index map | |
void | set_orbitalCounts (const std::map< int, int > &orbitalCounts_in) |
set element index to orbital index map | |
const std::map< int, int > & | get_orbitalCounts () const |
get element index to orbital index map | |
void | set_lnchiCounts (const std::map< int, std::map< int, int > > &lnchiCounts_in) |
set lnchiCounts | |
const std::map< int, std::map< int, int > > & | get_lnchiCounts () const |
get lnchiCounts | |
void | set_sc_lambda () |
set sc_lambda | |
void | set_sc_lambda (const ModuleBase::Vector3< double > *lambda_in, int nat_in) |
set sc_lambda from variable | |
void | set_target_mag () |
set target_mag | |
void | set_target_mag (const ModuleBase::Vector3< double > *target_mag_in, int nat_in) |
set target_mag from variable | |
void | set_target_mag (const std::vector< ModuleBase::Vector3< double > > &target_mag_in) |
set target magnetic moment | |
void | set_constrain () |
set constrain | |
void | set_constrain (const ModuleBase::Vector3< int > *constrain_in, int nat_in) |
set constrain from variable | |
const std::vector< ModuleBase::Vector3< double > > & | get_sc_lambda () const |
get sc_lambda | |
const std::vector< ModuleBase::Vector3< double > > & | get_target_mag () const |
get target_mag | |
const std::vector< ModuleBase::Vector3< int > > & | get_constrain () const |
get constrain | |
int | get_nat () |
get nat | |
int | get_ntype () |
get ntype | |
void | check_atomCounts () |
check atomCounts | |
int | get_iat (int itype, int atom_index) |
get iat | |
void | set_nspin (int nspin) |
set nspin | |
int | get_nspin () |
get nspin | |
void | zero_Mi () |
zero atomic magnetic moment | |
double | get_decay_grad (int itype) |
get decay_grad | |
void | set_decay_grad () |
set decay_grad | |
const std::vector< double > & | get_decay_grad () |
get decay_grad | |
void | set_decay_grad (const double *decay_grad_in, int ntype_in) |
set decay_grad from variable | |
void | set_sc_drop_thr (double sc_drop_thr_in) |
set decay grad switch | |
void | set_input_parameters (double sc_thr_in, int nsc_in, int nsc_min_in, double alpha_trial_in, double sccut_in, double sc_drop_thr_in) |
set input parameters | |
double | get_sc_thr () |
get sc_thr | |
int | get_nsc () |
get nsc | |
int | get_nsc_min () |
get nsc_min | |
double | get_alpha_trial () |
get alpha_trial | |
double | get_sccut () |
get sccut | |
double | get_sc_drop_thr () |
get sc_drop_thr | |
void | set_ParaV (Parallel_Orbitals *ParaV_in) |
set orbital parallel info | |
void | set_solver_parameters (K_Vectors &kv_in, void *p_hamilt_in, void *psi_in, elecstate::ElecState *pelec_in) |
set parameters for solver | |
void | set_operator (hamilt::Operator< FPTYPE > *op_in) |
save operator for spin-constrained DFT | |
void | set_mag_converged (bool is_Mi_converged_in) |
set is_Mi_converged | |
bool | mag_converged () const |
get is_Mi_converged | |
void | cal_mi_pw () |
void | set_operator (hamilt::Operator< std::complex< double > > *op_in) |
void | set_operator (hamilt::Operator< double > *op_in) |
void | calculate_delta_hcc (std::complex< double > *h_tmp, const std::complex< double > *becp_k, const ModuleBase::Vector3< double > *delta_lambda, const int nbands, const int nkb, const int *nh_iat) |
void | cal_mw_from_lambda (int i_step, const ModuleBase::Vector3< double > *delta_lambda) |
void | update_psi_charge (const ModuleBase::Vector3< double > *delta_lambda, bool pw_solve) |
void | run_lambda_loop (int outer_step, bool rerun) |
void | print_termination () |
bool | check_rms_stop (int outer_step, int i_step, double rms_error, double duration, double total_duration) |
void | print_header () |
print header | |
void | check_restriction (const std::vector< ModuleBase::Vector3< double > > &search, double &alpha_trial) |
check restriction | |
double | cal_alpha_opt (std::vector< ModuleBase::Vector3< double > > spin, std::vector< ModuleBase::Vector3< double > > spin_plus, const double alpha_trial) |
calculate alpha_opt | |
bool | check_gradient_decay (std::vector< ModuleBase::Vector3< double > > new_spin, std::vector< ModuleBase::Vector3< double > > spin, std::vector< ModuleBase::Vector3< double > > delta_lambda, std::vector< ModuleBase::Vector3< double > > dnu_last_step, bool print) |
check gradient decay | |
void | cal_mw_from_lambda (int i_step, const ModuleBase::Vector3< double > *delta_lambda) |
void | cal_mi_lcao (const int &step, bool print) |
void | run_lambda_loop (int outer_step, bool rerun) |
bool | check_rms_stop (int outer_step, int i_step, double rms_error, double duration, double total_duration) |
void | check_restriction (const std::vector< ModuleBase::Vector3< double > > &search, double &alpha_trial) |
double | cal_alpha_opt (std::vector< ModuleBase::Vector3< double > > spin, std::vector< ModuleBase::Vector3< double > > spin_plus, const double alpha_trial) |
calculate alpha_opt | |
void | print_termination () |
void | print_header () |
bool | check_gradient_decay (std::vector< ModuleBase::Vector3< double > > new_spin, std::vector< ModuleBase::Vector3< double > > old_spin, std::vector< ModuleBase::Vector3< double > > new_delta_lambda, std::vector< ModuleBase::Vector3< double > > old_delta_lambda, bool print) |
Static Public Member Functions | |
static SpinConstrain & | getScInstance () |
Public method to access the Singleton instance. | |
Public Attributes | |
bool | higher_mag_prec = false |
use rerun to get higher precision in lambda_loop for PW base | |
Parallel_Orbitals * | ParaV = nullptr |
void * | p_hamilt = nullptr |
void * | psi = nullptr |
elecstate::ElecState * | pelec = nullptr |
ModulePW::PW_Basis_K * | pw_wfc_ = nullptr |
double | tpiba = 0.0 |
const double | meV_to_Ry = 7.349864435130999e-05 |
save ucell.tpiba | |
K_Vectors | kv_ |
Private Member Functions | |
SpinConstrain () | |
~SpinConstrain () | |
SpinConstrain & | operator= (SpinConstrain const &)=delete |
SpinConstrain & | operator= (SpinConstrain &&)=delete |
Private Attributes | |
std::map< int, std::vector< ScAtomData > > | ScData |
std::map< int, double > | ScDecayGrad |
std::vector< double > | decay_grad_ |
std::map< int, int > | atomCounts |
std::map< int, int > | orbitalCounts |
std::map< int, std::map< int, int > > | lnchiCounts |
std::vector< ModuleBase::Vector3< double > > | lambda_ |
std::vector< ModuleBase::Vector3< double > > | target_mag_ |
std::vector< ModuleBase::Vector3< double > > | Mi_ |
std::vector< std::string > | atomLabels_ |
double | escon_ = 0.0 |
int | nspin_ = 0 |
int | npol_ = 1 |
int | nsc_ |
int | nsc_min_ |
double | sc_drop_thr_ = 1e-3 |
double | sc_thr_ |
double | current_sc_thr_ |
std::vector< ModuleBase::Vector3< int > > | constrain_ |
bool | debug = false |
double | alpha_trial_ |
double | restrict_current_ |
hamilt::Operator< FPTYPE > * | p_operator = nullptr |
operator for spin-constrained DFT, used for calculating current atomic magnetic moment | |
bool | is_Mi_converged = false |
if atomic magnetic moment is converged | |
FPTYPE * | sub_h_save |
FPTYPE * | sub_s_save |
FPTYPE * | becp_save |
|
delete |
Delete copy and move constructors and assign operators.
|
delete |
|
inlineprivate |
|
inlineprivate |
double spinconstrain::SpinConstrain< std::complex< double > >::cal_alpha_opt | ( | std::vector< ModuleBase::Vector3< double > > | spin, |
std::vector< ModuleBase::Vector3< double > > | spin_plus, | ||
const double | alpha_trial | ||
) |
calculate alpha_opt
double spinconstrain::SpinConstrain< FPTYPE >::cal_alpha_opt | ( | std::vector< ModuleBase::Vector3< double > > | spin, |
std::vector< ModuleBase::Vector3< double > > | spin_plus, | ||
const double | alpha_trial | ||
) |
calculate alpha_opt
double spinconstrain::SpinConstrain< double >::cal_alpha_opt | ( | std::vector< ModuleBase::Vector3< double > > | spin, |
std::vector< ModuleBase::Vector3< double > > | spin_plus, | ||
const double | alpha_trial | ||
) |
calculate alpha_opt
double spinconstrain::SpinConstrain< FPTYPE >::cal_escon | ( | ) |
calculate the energy of \sum_i \lambda_i * Mi if this->is_mag_converged is true, then this function will calculate the energy and return the real value if this->is_mag_converged is false, then this function will return 0.0
void spinconstrain::SpinConstrain< double >::cal_mi_lcao | ( | const int & | step, |
bool | |||
) |
void spinconstrain::SpinConstrain< FPTYPE >::cal_mi_lcao | ( | const int & | step, |
bool | print = false |
||
) |
calculate the magnetization of each atom with real space projection method for LCAO base
step | : the step number of the SCF calculation |
: print the magnetization of each atom if true |
void spinconstrain::SpinConstrain< std::complex< double > >::cal_mi_pw | ( | ) |
void spinconstrain::SpinConstrain< FPTYPE >::cal_mi_pw | ( | ) |
void spinconstrain::SpinConstrain< std::complex< double > >::cal_mw_from_lambda | ( | int | i_step, |
const ModuleBase::Vector3< double > * | delta_lambda | ||
) |
update H(k) for each k point
void spinconstrain::SpinConstrain< double >::cal_mw_from_lambda | ( | int | i_step, |
const ModuleBase::Vector3< double > * | delta_lambda | ||
) |
void spinconstrain::SpinConstrain< FPTYPE >::cal_mw_from_lambda | ( | int | i_step, |
const ModuleBase::Vector3< double > * | delta_lambda = nullptr |
||
) |
void spinconstrain::SpinConstrain< std::complex< double > >::calculate_delta_hcc | ( | std::complex< double > * | h_tmp, |
const std::complex< double > * | becp_k, | ||
const ModuleBase::Vector3< double > * | delta_lambda, | ||
const int | nbands, | ||
const int | nkb, | ||
const int * | nh_iat | ||
) |
void spinconstrain::SpinConstrain< FPTYPE >::calculate_delta_hcc | ( | std::complex< double > * | h_tmp, |
const std::complex< double > * | becp_k, | ||
const ModuleBase::Vector3< double > * | delta_lambda, | ||
const int | nbands, | ||
const int | nkb, | ||
const int * | nh_iat | ||
) |
void spinconstrain::SpinConstrain< FPTYPE >::check_atomCounts | ( | ) |
check atomCounts
bool spinconstrain::SpinConstrain< double >::check_gradient_decay | ( | std::vector< ModuleBase::Vector3< double > > | new_spin, |
std::vector< ModuleBase::Vector3< double > > | old_spin, | ||
std::vector< ModuleBase::Vector3< double > > | new_delta_lambda, | ||
std::vector< ModuleBase::Vector3< double > > | old_delta_lambda, | ||
bool | |||
) |
bool spinconstrain::SpinConstrain< FPTYPE >::check_gradient_decay | ( | std::vector< ModuleBase::Vector3< double > > | new_spin, |
std::vector< ModuleBase::Vector3< double > > | old_spin, | ||
std::vector< ModuleBase::Vector3< double > > | new_delta_lambda, | ||
std::vector< ModuleBase::Vector3< double > > | old_delta_lambda, | ||
bool | print = false |
||
) |
check gradient decay
bool spinconstrain::SpinConstrain< std::complex< double > >::check_gradient_decay | ( | std::vector< ModuleBase::Vector3< double > > | new_spin, |
std::vector< ModuleBase::Vector3< double > > | spin, | ||
std::vector< ModuleBase::Vector3< double > > | delta_lambda, | ||
std::vector< ModuleBase::Vector3< double > > | dnu_last_step, | ||
bool | |||
) |
check gradient decay
void spinconstrain::SpinConstrain< std::complex< double > >::check_restriction | ( | const std::vector< ModuleBase::Vector3< double > > & | search, |
double & | alpha_trial | ||
) |
check restriction
void spinconstrain::SpinConstrain< FPTYPE >::check_restriction | ( | const std::vector< ModuleBase::Vector3< double > > & | search, |
double & | alpha_trial | ||
) |
apply restriction
void spinconstrain::SpinConstrain< double >::check_restriction | ( | const std::vector< ModuleBase::Vector3< double > > & | search, |
double & | alpha_trial | ||
) |
bool spinconstrain::SpinConstrain< std::complex< double > >::check_rms_stop | ( | int | outer_step, |
int | i_step, | ||
double | rms_error, | ||
double | duration, | ||
double | total_duration | ||
) |
bool spinconstrain::SpinConstrain< FPTYPE >::check_rms_stop | ( | int | outer_step, |
int | i_step, | ||
double | rms_error, | ||
double | duration, | ||
double | total_duration | ||
) |
lambda loop helper functions
bool spinconstrain::SpinConstrain< double >::check_rms_stop | ( | int | outer_step, |
int | i_step, | ||
double | rms_error, | ||
double | duration, | ||
double | total_duration | ||
) |
double spinconstrain::SpinConstrain< FPTYPE >::get_alpha_trial | ( | ) |
get alpha_trial
const std::map< int, int > & spinconstrain::SpinConstrain< FPTYPE >::get_atomCounts | ( | ) | const |
get element index to atom index map
const std::vector< ModuleBase::Vector3< int > > & spinconstrain::SpinConstrain< FPTYPE >::get_constrain | ( | ) | const |
get constrain
get_constrain
const std::vector< double > & spinconstrain::SpinConstrain< FPTYPE >::get_decay_grad | ( | ) |
get decay_grad
double spinconstrain::SpinConstrain< FPTYPE >::get_decay_grad | ( | int | itype | ) |
get decay_grad
get grad_decay this function can only be called by the root process because only root process reads the ScDecayGrad from json file
double spinconstrain::SpinConstrain< FPTYPE >::get_escon | ( | ) |
int spinconstrain::SpinConstrain< FPTYPE >::get_iat | ( | int | itype, |
int | atom_index | ||
) |
get iat
const std::map< int, std::map< int, int > > & spinconstrain::SpinConstrain< FPTYPE >::get_lnchiCounts | ( | ) | const |
get lnchiCounts
int spinconstrain::SpinConstrain< FPTYPE >::get_nat | ( | ) |
get nat
int spinconstrain::SpinConstrain< FPTYPE >::get_nsc | ( | ) |
get nsc
int spinconstrain::SpinConstrain< FPTYPE >::get_nsc_min | ( | ) |
get nsc_min
int spinconstrain::SpinConstrain< FPTYPE >::get_nspin | ( | ) |
get nspin
int spinconstrain::SpinConstrain< FPTYPE >::get_ntype | ( | ) |
get ntype
const std::map< int, int > & spinconstrain::SpinConstrain< FPTYPE >::get_orbitalCounts | ( | ) | const |
get element index to orbital index map
double spinconstrain::SpinConstrain< FPTYPE >::get_sc_drop_thr | ( | ) |
get sc_drop_thr
const std::vector< ModuleBase::Vector3< double > > & spinconstrain::SpinConstrain< FPTYPE >::get_sc_lambda | ( | ) | const |
get sc_lambda
double spinconstrain::SpinConstrain< FPTYPE >::get_sc_thr | ( | ) |
get sc_thr
double spinconstrain::SpinConstrain< FPTYPE >::get_sccut | ( | ) |
get sccut
const std::vector< ModuleBase::Vector3< double > > & spinconstrain::SpinConstrain< FPTYPE >::get_target_mag | ( | ) | const |
get target_mag
|
static |
Public method to access the Singleton instance.
pubic methods for setting and getting spin-constrained DFT parameters
void spinconstrain::SpinConstrain< FPTYPE >::init_sc | ( | double | sc_thr_in, |
int | nsc_in, | ||
int | nsc_min_in, | ||
double | alpha_trial_in, | ||
double | sccut_in, | ||
double | sc_drop_thr_in, | ||
const UnitCell & | ucell, | ||
Parallel_Orbitals * | ParaV_in, | ||
int | nspin_in, | ||
K_Vectors & | kv_in, | ||
void * | p_hamilt_in, | ||
void * | psi_in, | ||
elecstate::ElecState * | pelec_in, | ||
ModulePW::PW_Basis_K * | pw_wfc_in = nullptr |
||
) |
initialize spin-constrained DFT
pubic interface for spin-constrained DFT
|
inline |
get is_Mi_converged
|
privatedelete |
|
privatedelete |
void spinconstrain::SpinConstrain< std::complex< double > >::print_header | ( | ) |
print header
void spinconstrain::SpinConstrain< FPTYPE >::print_header | ( | ) |
print header info
void spinconstrain::SpinConstrain< double >::print_header | ( | ) |
void spinconstrain::SpinConstrain< FPTYPE >::print_Mag_Force | ( | std::ofstream & | ofs_running | ) |
print magnetic force, defined as \frac{\delta{L}}/{\delta{Mi}} = -lambda[iat])
print magnetic force (defined as \frac{\delta{L}}/{\delta{Mi}} = -lambda[iat])
void spinconstrain::SpinConstrain< FPTYPE >::print_Mi | ( | std::ofstream & | ofs_running | ) |
print mi
print Mi
void spinconstrain::SpinConstrain< std::complex< double > >::print_termination | ( | ) |
void spinconstrain::SpinConstrain< FPTYPE >::print_termination | ( | ) |
print termination message
void spinconstrain::SpinConstrain< double >::print_termination | ( | ) |
void spinconstrain::SpinConstrain< std::complex< double > >::run_lambda_loop | ( | int | outer_step, |
bool | rerun | ||
) |
check if restriction is needed
check if restriction is needed
void spinconstrain::SpinConstrain< double >::run_lambda_loop | ( | int | outer_step, |
bool | rerun | ||
) |
void spinconstrain::SpinConstrain< FPTYPE >::run_lambda_loop | ( | int | outer_step, |
bool | rerun = true |
||
) |
void spinconstrain::SpinConstrain< FPTYPE >::set_atomCounts | ( | const std::map< int, int > & | atomCounts_in | ) |
set element index to atom index map
void spinconstrain::SpinConstrain< FPTYPE >::set_constrain | ( | ) |
set constrain
void spinconstrain::SpinConstrain< FPTYPE >::set_constrain | ( | const ModuleBase::Vector3< int > * | constrain_in, |
int | nat_in | ||
) |
set constrain from variable
void spinconstrain::SpinConstrain< FPTYPE >::set_decay_grad | ( | ) |
set decay_grad
set grad_decy
void spinconstrain::SpinConstrain< FPTYPE >::set_decay_grad | ( | const double * | decay_grad_in, |
int | ntype_in | ||
) |
set decay_grad from variable
set grad_decy from variable
void spinconstrain::SpinConstrain< FPTYPE >::set_input_parameters | ( | double | sc_thr_in, |
int | nsc_in, | ||
int | nsc_min_in, | ||
double | alpha_trial_in, | ||
double | sccut_in, | ||
double | sc_drop_thr_in | ||
) |
set input parameters
void spinconstrain::SpinConstrain< FPTYPE >::set_lnchiCounts | ( | const std::map< int, std::map< int, int > > & | lnchiCounts_in | ) |
set lnchiCounts
|
inline |
set is_Mi_converged
void spinconstrain::SpinConstrain< FPTYPE >::set_nspin | ( | int | nspin | ) |
set nspin
void spinconstrain::SpinConstrain< double >::set_operator | ( | hamilt::Operator< double > * | op_in | ) |
void spinconstrain::SpinConstrain< FPTYPE >::set_operator | ( | hamilt::Operator< FPTYPE > * | op_in | ) |
save operator for spin-constrained DFT
op_in | the base pointer of operator, actual type should be DeltaSpin<OperatorLCAO<TK, TR>>* |
void spinconstrain::SpinConstrain< std::complex< double > >::set_operator | ( | hamilt::Operator< std::complex< double > > * | op_in | ) |
void spinconstrain::SpinConstrain< FPTYPE >::set_orbitalCounts | ( | const std::map< int, int > & | orbitalCounts_in | ) |
set element index to orbital index map
void spinconstrain::SpinConstrain< FPTYPE >::set_ParaV | ( | Parallel_Orbitals * | ParaV_in | ) |
set orbital parallel info
set ParaV
void spinconstrain::SpinConstrain< FPTYPE >::set_sc_drop_thr | ( | double | sc_drop_thr_in | ) |
set decay grad switch
set sc_drop_thr
void spinconstrain::SpinConstrain< FPTYPE >::set_sc_lambda | ( | ) |
set sc_lambda
void spinconstrain::SpinConstrain< FPTYPE >::set_sc_lambda | ( | const ModuleBase::Vector3< double > * | lambda_in, |
int | nat_in | ||
) |
set sc_lambda from variable
void spinconstrain::SpinConstrain< FPTYPE >::set_solver_parameters | ( | K_Vectors & | kv_in, |
void * | p_hamilt_in, | ||
void * | psi_in, | ||
elecstate::ElecState * | pelec_in | ||
) |
set parameters for solver
void spinconstrain::SpinConstrain< FPTYPE >::set_target_mag | ( | ) |
set target_mag
void spinconstrain::SpinConstrain< FPTYPE >::set_target_mag | ( | const ModuleBase::Vector3< double > * | target_mag_in, |
int | nat_in | ||
) |
set target_mag from variable
void spinconstrain::SpinConstrain< FPTYPE >::set_target_mag | ( | const std::vector< ModuleBase::Vector3< double > > & | target_mag_in | ) |
set target magnetic moment
this is wired because the UnitCell class set in x direction
void spinconstrain::SpinConstrain< std::complex< double > >::update_psi_charge | ( | const ModuleBase::Vector3< double > * | delta_lambda, |
bool | pw_solve | ||
) |
void spinconstrain::SpinConstrain< FPTYPE >::update_psi_charge | ( | const ModuleBase::Vector3< double > * | delta_lambda, |
bool | pw_solve = true |
||
) |
update the charge density for LCAO base with new lambda update the charge density and psi for PW base with new lambda
void spinconstrain::SpinConstrain< FPTYPE >::zero_Mi | ( | ) |
zero atomic magnetic moment
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
bool spinconstrain::SpinConstrain< FPTYPE >::higher_mag_prec = false |
use rerun to get higher precision in lambda_loop for PW base
|
private |
if atomic magnetic moment is converged
K_Vectors spinconstrain::SpinConstrain< FPTYPE >::kv_ |
|
private |
|
private |
const double spinconstrain::SpinConstrain< FPTYPE >::meV_to_Ry = 7.349864435130999e-05 |
save ucell.tpiba
|
private |
|
private |
|
private |
input parameters for lambda-loop
|
private |
|
private |
|
private |
void* spinconstrain::SpinConstrain< FPTYPE >::p_hamilt = nullptr |
|
private |
operator for spin-constrained DFT, used for calculating current atomic magnetic moment
Parallel_Orbitals* spinconstrain::SpinConstrain< FPTYPE >::ParaV = nullptr |
important outter class pointers used in spin-constrained DFT
elecstate::ElecState* spinconstrain::SpinConstrain< FPTYPE >::pelec = nullptr |
void* spinconstrain::SpinConstrain< FPTYPE >::psi = nullptr |
ModulePW::PW_Basis_K* spinconstrain::SpinConstrain< FPTYPE >::pw_wfc_ = nullptr |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
double spinconstrain::SpinConstrain< FPTYPE >::tpiba = 0.0 |